Categories
Community Tips

Inspiration for your coding journey

In this episode, we welcome Lars Bergstrom, currently Director of Engineering at Google following an impressive career in companies like Mozilla and Microsoft. Lars is navigating us through his career path, sharing his experience and offering useful advice and inspiration to software developers as they plan their coding journey.

Ayan  

Hi, Lars, how’s it going? 

Lars  

Hey, it’s going great. How are you? 

Ayan  

I’m pretty good. So, I’m really excited to have you here. We just started this podcast and having you as one of the few initial guests is really amazing. I can feel right away. So, thank you for doing this. Tell me about what things you have been up to and a small introduction about you and what you have been currently doing. 

Lars  

Thanks for the opportunity to be the first speaker here. I’ve been working with the company for a really, really long time. And I’m excited to see you getting into podcasts and the rest. So, My name is Lars, I’m Director of Engineering here at Android and I work on basically supporting the teams that build the compilers, the tools, and the runtimes that you use to both build the Android operating system, as well as build applications that target Android. So, I’ve been here for a little more than two years now, officially, and it’s been a great new gig to get started on. 

Ayan  

Oh, that’s amazing. So, I’ve been just going through your LinkedIn, and I was amazed to see that  you have worked with some amazing organizations and companies and amazing projects. So, we are definitely going to be touching upon that in a bit. First I wanted to know that currently, you’re working for Google, but you have spent many years in Mozilla.  

So, what would you say would be the different working style for completely open source organizations like Mozilla versus Google, which does have a fair bit of open source such in every project that they have been doing. But still, it’s a company where I am sure there must be some differences. So, could you just tell us about how you feel is different working for Mozilla and working for a company like Google?  

Lars  

Yeah, it’s really interesting, because Mozilla was, or is also not just a corporation, but it’s actually a nonprofit. So, it’s a very mission driven organization, where, you know, Google is definitely a business. And we both work on open-source projects, but with kind of very different goals and very different workstyles.  

Right at Mozilla, one of the sort of hallmarks, there was radical transparency and openness, like in a way that I was not used to, because I’d been at Microsoft before that as well. And so, the idea that not only would the code be open source, but the plans were open source, our bugs were open, what companies were working with our long-term goals, sort of even how the business made money was very open. And that kind of transparency was really interesting and difficult, you know, was a challenge for me, because you get feedback very early on in the process, right, you’re just sort of throwing thoughts and ideas around thinking maybe we’ll change it like this, maybe we’ll change it like that.  

And a lot of the private iteration you usually do in private companies, is actually out in public, for people who you know, and even after 20 years in the industry, you never get rid of that fear of like, oh, my gosh, is someone going to notice that actually I’m an idiot, that I was wrong here that I made some horrible mistake and getting comfortable with the idea that you’re going to be doing this work in public, and you’re going to get feedback from a lot of people. And, you know, the big nice thing about that is that it builds trust, it brought people in early, they felt like they had been part of the conversation. They were part of the journey. And even if they didn’t agree with where you went, in the end with the final decisions for the product, they felt like at least they were part of  that conversation and journey.  

And it’s, very different at big companies. And you have a variety of projects, like you mentioned at Google, I’m fortunate to work on Android where most of what we do is open source, but it has a very different feel, right? Mozilla is trying to get a lot of public contributors off individual developers working on open-source projects to contribute.  

With Android, we want to do that. But really, the key thing is we have over 1200 vendors who build on Android, who want to build commercial products, and they want to participate, they want to contribute, but they don’t necessarily want to share their long-term product plans publicly with it. And so it’s a very different structure of the organization where you’re still open source and you still want to contribute you do as much as you can in public, but you also have to respect the privacy of these companies that are trying to build new products and market and many of these companies are competing with one another. We as Google want to support all of them, and try to encourage them, like; Hey, I know you’re making these changes, but could you put it upstream, like, we think this will be beneficial for the whole ecosystem, and it would be less work for you if you did that.  

And so they both, even open source projects, there’s just so many different flavors of them. And like you said, they’re different at different companies. And it’s been an interesting journey for me to get to learn about how this works, and how you encourage participation, because that’s the key part of open source, right, you’re making an open source, there’s some discoverability aspects, but really, you want participation, you want other people to come with you on this journey, to build products. And how you do that, and how you structure it to make that happen, is really interesting based on your business’s goals.  

Ayan  

That’s really fascinating. It sounds like working in a completely open organization. So the minute you have an idea hit your brain is going to be completely in the public, and you’re getting the feedback loop started from day one. But for organizations, which also have to care about the business, it’s like, okay, we’re going to tease that in, let’s say, next quarter, or next year, but I’m sure that working on the Android operating system, you still want contributors, like you mentioned, you still want people to have that sense of contribution to an open source project, but at the same time, you still want features to be part of the mainline or upstream, and they really would make some value to the operating system. So, is it like something along those lines? 

Lars  

Yeah, and you want to be respectful of the pace that with which people can bring these products to market or adapt these changes,if they’re, in an open source project, you might just push the change out and say; “Okay, we’re changing the new API, there’s going to be new requirements or something else, and we’re just going to land it in the tree, and we’re going to make this happen”.  

And there’s much more of a conversation based on sort of product or business needs, this might not be the most important feature, our vendor ecosystem might want to do the work, but they might not be able to do it for one year. And so, can we make it optional for a bit? How long do we need to keep the old version around? How do we migrate people?  

And it’s really thinking about that story of evolution. And not just technically, how can we do it, but how can we make sure that our vendors can go with it, that our application developers can pick it up in time? How does that whole story work together, and that can be very different from open source projects where you just land a new API change, and as long as it isn’t too breaking, you can just sort of keep rolling forward with it. It’s much more like a consortium there. And then to be clear, we do still get the feedback from our vendor partners as well, where they’ll say, Lars, that’s a terrible idea. Like we absolutely can’t do that, what are you thinking, but it happens in private, at least. 

Ayan  

 So, going a little deeper into your role at the Android project and Google, in general. So, what would you say is like your day-to-day roles? Are you still involved in programming? Or is it more like decision making and project management? And just in general, like, what sort of things have been doing lately for Android? And what does your usual day in a workload look like in terms of technicality when it comes to managing such projects?  

Lars  

Yeah. So unfortunately, in my role, I don’t get to read a lot of code anymore. I try to take some time, usually around the new year to go back, I’ll do advent of code, I’ll try to do a commit or two in the project, because I think it’s important at all levels of engineering management to really understand the tools that your team is working with. And not just the language, but also the CI system.  

What do they have to do when they check in? What tests get run? What do the portals look like? What happens when things break? How do they track down these bugs, it’s very easy, particularly as you get an engineer, to have this kind of memory of how everything was, 5 or 10 years ago, back in the days where you were slinging code, and that can lead to this disconnect between you and the team where you think it’s super easy to get a change.  

And then the team says like, no, you’ve forgotten their privacy reviews, there’s 2.2 million tests that run before you can check in your first change. And so, I do try to do that, but to be clear, I don’t go on any piece of code, my name is not on the owners file, I don’t get to look in the headers there.  

Most of my day-to-day work is really focused around either management work, technical work or strategy. So, on the management side, I’m a people manager. This is why I’m in the role. I often joke about management, I can fix anything else, like everything is tactics and management, they have to like seeing people grow, you have to be personally invested in helping people get better at their jobs, seeing them grow, seeing them possibly go far beyond you, and get into new roles that are beyond where you’ve gone and that takes up a lot of my time. Whether it’s in coaching people, whether it’s in hiring, whether it’s in dealing with organizational structure and making sure that people have a good career path and everyone’s being well supported. That takes up a good portion of my time.  

Tactically, Android has a cadence, we ship new major versions of Android every year. And so tactically there’s sort of a feel to the overall year, right? We have times when we’re making new requests, we talk about the open-source changes and how you make them, there’s a time when we go out to our vendor ecosystem and say; Hey, this is what we’re thinking about doing for the next version of Android. There’s a time when we’re bringing that to Publix, there’s a time when we’re sort of burning down our work and trying to get the fixes out.  

And my job as a manager will really depend on the time of the year for where we’re kind of at in the product cycle. And then finally, the third bit I mentioned was strategic, which is where we’re trying to have multi-year initiatives. It’s very easy to just get caught up in the one year of Android and everything else is the infinite future. But there are some things that I work on, like adding support for new kinds of hardware, or new hardware features, or driving new programming language adoption or new tools. And those can take 2, 3, 5, even 10 years. And so, my job is making sure that we don’t forget about them, that we continue to march them along, that we’re making progress every year. So that when it’s ready to ship, we’re ready as a platform for its adoption. 

Ayan  

So, for a complex project, like Android, I’m sure there are a lot of components that are directly affecting consumers. So, you have to keep them in mind. And as well as developers, because you want them to have updated SDKs, all the libraries, so it makes the job easier. So as a project manager or as a developer in the past, what would you say is different in terms of a developer mindset, when you are creating something for, let’s say, end consumer versus something for to be used by developers, say, a library or an SDK? 

Lars  

So, I tend to think about it kind of at three levels, right there as the Android platform, there’s some set of libraries that we’re providing. And then there are kind of end user features. And each of those can move kind of at different paces, right. With platform level API’s. That is when we’re exposing a new API, it doesn’t matter if this is the Android operating system, or this is when I was at Mozilla, if this was a new web platform API in the browser, or if this was when I was at Microsoft, new things that we were exposing in Windows, those have to be incredibly long lived, right?  

When you introduce a new API like that, generally, it will live until the last device that shipped with it goes out of service. So, that can be 10 or more years. So the amount of care and thought that have to go into those new API’s, and you really want to make sure, because you’re going to be stuck supporting that for a very, very, very long time. But really, when you’re looking at it, that API will be fixed, and you will be supporting it and you will move forward with it.  

Libraries are very different, right, they can move much more quickly. But they have the problem that they have to run on old versions. So, if you’re making a new library for some new camera API that you want to provide to developers, you have to figure out not only how does that work on our device today, but how does that work on the more than 3 billion devices that are in the field right now? Because that’s the first thing that application developers ask you is like, look, I don’t care, these new devices, they’re great. They’re awesome. I’m seeing them all at CES right now, which is when we’re filming the show, but those won’t be in consumers hands, and they won’t be a substantial portion of our market for years.  

So how does this work on a four-year-old phone? When you’re a library developer, you’ve got to figure out both how to do that, and how you are going to help developers update to a new version of the library. Many developers will just drag that first person to the library and then say, great, okay, I got my version of OpenSSL, I can check certificates, never going to update it again. So how are you working with developers and package managers to make sure that they get the new versions that there’s value in that you don’t break them, but that you continue to work with it?  

And then on the feature side, that’s not specifically my area? I support a lot of those teams. But that’s much more user focused, that’s looking at how users are using their phones today and what are the challenges that they’re facing. Usage has changed over time, right? It’s been in the field a long time, I’m sure you have as well. And even if you look at over the last couple of years, the number of applications that people have has dramatically grown. And the kinds of applications that they’re using have changed substantially. They’ve moved from mostly text based social messaging services to more video and short form messaging services. And when you look at it from a product perspective, how does that change how they interact with notifications? How does that change how they think about, using multiple applications at the same time? Are they scrolling through their feed while they’re also doing something else?  

And so it’s not just about these static decisions about what is the best way to display a notification, but it’s contextually within the users life and the applications that they’re using today because nobody buys a phone to launch the settings application, right? They’re buying it for these third party applications and those change every year. That top 10 list changes rather substantially. How are we as an operating system building the features that help those applications really light up for users and users have a good experience that doesn’t feel kind of overwhelmed. Because the decisions we made when people only had a few applications, and there weren’t many notifications would not work very well in a world where most users have many 10s or 100s of applications and notifications are just coming in like a fire hose. 

Ayan  

Talking about that, I’m not really sure if there’s something that you were involved in, but I still wanted to take your perspective on it. I’m sure you’re doing a lot of operating system kernel and middleware stuff. But I just want to understand from your perspective, when do you think a project gets mature enough so it can start having different projects that support itself? For example, like in iOS, the application development used to happen on Swift, and it was Java for Android for a very long time. But the application developers and application flux were so high that they wanted to make it easier. So, iOS moved to Swift and Android moved to Kotlin. 

So when do you think this sort of decision comes into this picture, to take this massive leap forward so everyone is enabled and can feel powerful enough to be a part of this platform as an application developer or as a developer in general? 

Lars  

Yes, so I’ve been through many language changes over the years, right. I was at Microsoft during the .net revolution, where C sharp came out. Now I’m going through Java to Kotlin, I’m going through a lot of the C++ to Rust. And of course, on the website, the evolution that’s happened over there has been tremendous. And I think when you look at it, it’s not about language features, right? It’s coming back to sort of the analogy we’re making about how our users use the application, it’s about the demands changing for what has to be done with an application.  

So whether that’s with Swift, there was also a new UI framework that was coming out that Swift happened to be much better at programming. And so while Swift is a great language, and in many ways, you can say it’s better than Objective C, if there hadn’t also been a corresponding set of framework changes that were much easier to express and faster to author, I don’t know that we’ve seen would have seen the same pickup of Swift that we have.  

And it’s the same thing for Kotlin with jetpack compose, right. Jetpack compose plus Kotlin is kind of the magic, it’s not just Kotlin, although some of the things with nullability checking and async. And a lot of the features that really have not yet made it to Java, that innovation has really landed there and driven the adoption of it. And we see it with Rust as well that, just moving from C++ to Rust, people wouldn’t have done it, if it weren’t for the changing security landscape and some of the dynamics there.  

So there has to be this kind of convergence, like a language on its own really can’t win on the basis of better places to put the semicolons or the curly braces or syntactic sugar, those things are easy enough to backport into previous languages, backwards compatibility accepted, there has to be some other thing that’s tied to it, that’s going to solve some problem that developers are facing or make them more productive that really at least when I’ve seen languages be successful in my career that’s really been it, is that ​​

the language had a name, but there was some set of tooling that came along with it that made developers more productive, that solved real problems for them that caused that or that drove that change across the ecosystem. 

Ayan  

That definitely makes a lot of sense. Taking it to a bit less technical term, I want to  understand what things you keep in mind while you are hiring a fresh software engineer straight out of college, given the fact that you also have to mentor them in the long run and make them ready for the challenges this industry poses. So what sort of things do you keep in mind when you’re hiring a new, fresh graduate and trying to make their way into the software industry? 

Lars  

That’s, I’ll admit most of my hiring is focused on senior people, right? I hire people who hire new college graduates. So I don’t get hands on like, you don’t have to worry if you come in for a new grad interview at Google, it’s not going to be me with 25 years of experience, it’s going to be people who are closer to the code, because going back to what I said earlier, I don’t write a ton of code right now.  

But when I see there’s kind of two parts to it, right? There’s hiring and then there’s what I see makes people successful in the early stages of their grad career that we want to look for. And generally, it’s, can you solve a fairly well defined problem, but where there’s still a bunch of ambiguity? And what’s the algorithm we’re going to use? How are we going to write the code? Can you sort of understand that problem? Ask the right questions around it to hunger to disambiguate, where’s this going to run? Is it on the server? Is it because the client doesn’t have to run fast? How much memory is it going to use? And then be able to decompose that, write an implementation, get it tested and bring it to production quality. And we don’t expect people to be able to do that sort of out of the gate. ​​

But when we’re doing our interviews, that’s really what we’re looking for is, can you take an understand this problem and begin to work on it with some amount of mentoring and guidance, but generally in a productive way where you can do a bunch of work sort of independently on your own, given enough of the structure for what that particular problem is. 

Ayan  

So, problem solving is equally important, as well as optimizing it and understanding where the code ends up running. And so you can make it a bit more optimized for the end goal. 

Lars  

Yeah, and while the goal is getting the work done, this isn’t the big difference, right, moving from a class project to a production environment, is that your code isn’t running in the abstract anymore. It’s not, problem 15B implemented a linked list, it’s implemented a linked list inside of this multi-million-line codebase. That’s a large part of what you kind of have to scale up to is realizing that you have to figure out how your code fits into the system. So, it’s not about writing new data structures yourself. It’s about figuring out what are the patterns used in this code base? How do I make my code fit into this code base, as if it was a part of this overall multimillion line thing. And so, getting used to figuring out how to make your code feel like a part of the system is a really big part of one of the first challenges that hits many new college grads, because most of your college grad or bootcamp work is in the context of smaller problems.  

Unless you’re doing some open-source contribution class, no one’s going to give you a multi-million-line codebase and say, okay, now add this call to add a new field to the database and plumb it all the way through. ​​

And so one of the things new college grads have to be able to do is sort of the there’s this expression like “when in Rome”, right, it’s writing code, maybe not in the way that you would prefer, but in the way that is going to make you show up as a good team player.

That is you, you wrote code in the right style, you wrote the right kinds of tests, you wrote the right kind of documentation, you checked all the edge cases, your code fits in, and your other people on the team go; I’m really glad that you joined the team. Now we’ve got your code and your contributions are good, you didn’t decide that we were going to write this in some other language or bring it or write your own libraries for doing things that were already supported by the system. 

Ayan  

That’s great. I personally feel that apart from just solving the problem, it’s also very important given the scale and magnitude the industry is heading towards and it’s still there, the way by which you collaborate with different people sitting across the globe, and you’re communicating your ideas well, and you feel home when it’s about a lot of people working on a problem together. So, would you like to share any tips when it comes to collaborating with other people on a codebase or a project? Like what sort of things can people in universities or graduates  keep in mind when it comes to working on a project of a scale like Android or even bigger? 

Lars  

I mean, I think you hit it right on the head, the collaboration aspect, and closely tied to that, because of the global side is the communication aspect. And in some ways, it’s making sure that the way you’re delivering your feedback, and the way you’re working with other people comes from a place of humility and empathy.  

So it’s very easy, I write some code, I’m nervous about my code, and then you come and review my code. And if everything you say is technically correct, but it just feels like you’re saying; semicolons are on the wrong line, curly braces are in the wrong spot, your blah-blah like making sure that in your interactions, you’re starting from this place of where it feels like he’s building that trust is hard with other people on even on your own team. ​​

And so how do you really help either provide the feedback or ask questions in a way that feels like you’re working together.

So rather than, if you’re pointing out a bunch of places where the style guide isn’t met, saying; Hey, these are some coordinates, I wish we had tools that handled it. But generally, in the code base, we’d like to put the curly brace here and stuff like that, sorry, we don’t have the tools in place, right? It’s the same message, but it’s packaged up in a way that makes sure that they know you’re not mad at them. But also, that you’re not, this isn’t a conversation, right? We’re not conversing about where the semicolon should go. This is the policy of the codebase. This is how it’s going to happen.  

And similarly, when you’re asking questions about systems, leading with; Hey, I couldn’t figure out how do I call this database method and also requests that it do it in a certain way, asking from a perspective of hey, I couldn’t find it, rather than; why doesn’t this database method have a third argument that’s an integer that tells me how many seconds it should run in, and otherwise timeout, right? Coming at it in a way that feels collaborative. Like you’re having a conversation with people, it’s much too easy.  

Also, it can be very difficult culturally, right? The way that people ask questions in different cultures in the way you’re brought up to be very different and learning to adjust to, in particular International Open-Source kind of norms, or even just US based tech company norms around how you interact with people. Just looking and reading the codebase and looking at other pull requests and other comments to really understand how people do their code reviews and how am I going to show up. 

Am I going to be the kind of person that people want to have on the team and want to involve in conversations? Or are people going to be terrified? Like, oh my gosh, Lars reviewed my code. Oh, man, I’m going to be in tears tonight. And this isn’t academic, right?  

I’ve been managing for a long time, I have seen people in tears over comments they got on code reviews, where the code reviewer had not meant to be rude or abrasive or mean or dismissive, but the person took it so personally, because of the way it had been phrased that they just broke down. And I’ve also seen the other side of it, where people just got enraged, and were like, I can’t believe we have Lars on the TV is a terrible person, he makes these horrible, nasty comments by and then you look at it, and none of it was nasty. It was blunt, but it wasn’t nasty.  

And so that’s really when coming back to your questions about communication and collaboration, just really watching even the subtle, that’s not just the technical bits of this is correct. But the business technical writing standards of how I communicate across cultures and across time zones and remotely with people that I haven’t met in person, because often, you haven’t met people in person in a lot of these settings, particularly during COVID. But even now, in our more distributed settings, and so a lot of the things that you had where, you were running into this person at the watercooler, you went to lunch with them, you had some silly team morale event where you were taking frisbees and throwing them in buckets or something, right?  

Those in person casual activities that build trust, where you can say, oh, Lars is generally a good person, that would normally paper over a lot of these communication difficulties don’t exist in these modern environments, and modern highly distributed workplaces. And so, you have to work a lot harder in your communications to build up that trust over time, because you don’t have these default mechanisms in person that normally used to handle it in what I would call the olden days. 

Ayan  

Yeah, that sounds like being part of the Linux kernel mailing list and not taking it personally, is a great practice. You mentioned empathy, and I couldn’t agree more how important it has been to ensure that everyone is having a healthy environment when it comes to ‘contribution’, and everyone is being heard of.  

Do you also have some sort of a personal mantra when it comes to managing people and or being a stakeholder in a project of this magnitude? And do you have some sort of things that you could share, apart from being kind. So, what would you say that something that we could learn from? 

Lars  

Some of this will not be very surprising, I am very tolerant of ignorance. We all start out not knowing things, it’s going to take people a very long time. ​​

So, make sure to be patient with people as they’re learning new areas, but do not be patient with people who have communication challenges.

So, the minute that you see one of these patterns and when you’ve been in the industry enough, or that you can see some of these and sometimes it can be misspoken, like I said before where it’s too abrasive, it can also be not noticing power imbalances.  

The feedback that I give to one of my peers is delivered in a very different form than the feedback that I give to somebody who is a new college grad. Because,  we like to be as flat organizationally as possible. But the reality is that there are power imbalances in these places. From a management perspective, one of the things that I do, and one of the things I require from my managers is, when you see a communication pattern, you address it privately and immediately. Like this is one of the most important points of coaching feedback, like the mentoring and the code stuff we can get to, when we get to it, if people are writing bad code, we’ll get that fixed, there can be a long-term arc there, we can send people to training. But when you see these sorts of communication issues, or these interaction issues, you need to dig into that immediately.  

As a manager, that’s one of the things you notice, as you’re on a video call, or you’re seeing these PRs go through, and you just kind of, you’re noticing, like certain pairs of individuals, or certain teams that really don’t want to try to route around each other and stuff like that. And from a manager perspective, I push on that. And I’m like, you have to nip that in the bud right away. Because those are the kinds of things that if you get it early, you can address it, right? If you wait until it all blows up, like people are leaving the company, or they’re leaving the team at the very least, you may even have an HR issue on your hand where it escalates. And then somebody says something that really shouldn’t be said at work. And now, it’s a thing, right?  

And it’s important because as a manager, people try to hide this stuff from you, right? I don’t want to bring it up to Lars. He’s busy. He’s not going to handle it. But everybody on the team sees it. They’re like, ‘oh, my gosh, Carlos and Steve are going at it again. Did you see PR 11297? Oh, my gosh, get the popcorn out’, right? And it’s not good for the team and they’ve all been seeing it for a while. So, by the time you see it as a manager, even as a smell, that seems probably been sitting on it for a while and just hasn’t brought it up to you. So that’s really my biggest man.  

One thing because if you have a team that is gelled and productive and is working well together, that tends to lead to higher quality outcomes, more predictable engineering schedules, more trust, they’re willing to tell you that things are off schedule. I don’t mind, things are always off schedule, right? It’s software engineering, right? Despite engineering in the name, we do not have the delivery of other engineering fields that have real strict schedules and real deadlines. We don’t have that in software. And just as long as I know, early, we can adapt our schedule and stuff like that.  

But when you get into this toxic environment and low trust, there’s really nothing you can do as a leader to bring it back on track that isn’t really a nuclear solution, completely restructuring it, removing teams that are no longer working well together. And by that point, that’s the worst-case scenario, that basically stalls all work, you’re rebuilding the whole team. So, if you get that right, like, generally, as a manager, if your team is working well together, your job is pretty easy. They’re working, they resolve issues on their own, they figure out problems, they feel comfortable reaching out to each other for help. There are very few things that really escalate to you and you can focus, when I was talking earlier, you can focus less on the tactical bits, and more on management, how am I growing the team and building their skills, and on the strategic, what are we doing in the long run, because when your team is not running well, the tactical did everything is going badly, that ends up sucking up all your time as a manager. 

 And then you’re not spending any time growing people on the team or are working on developing their skills, because you’re so busy handling the technical bits, and you’re not working on any of the long-term needs of your business or your users. Because again, you’re just trying to get product out the door and meet these hard deadlines. 

Ayan  

That’s great advice. I personally give a lot of credit to communities when it comes to learning these sorts of skills, technical but even communication and collaboration. So, with you back in the time, we’re part of, let’s say, some community, some meetup groups that you used to hang out with the people who have the same interest. If you could just share the communities that you were part of, and maybe you are still part of.. I’ve seen that you’re still part of the Rust Foundation Board, that itself is a huge community and Android is a huge community. But back in the days, when you were still finding your ways around the software industry. Would you say that communities have also played a huge role in that? 

Lars  

Yes, and finding that intersection of your interests and others that you can talk with to get an outsider’s perspective, because you’re going to have the natural communities around the work that you’re doing at work, but trying to find what is local and interesting to you where you can participate. And it’s as much about building your network and talking with other people.  

Because particularly early in your career, you can watch the talks, you can listen to me on a podcast or stuff like that. But you don’t really have a sense for what would like to work at a start at this exact phase in the company. And people can talk in very broad terms.

​​But going to these communities, local meetups, in particular, around your areas are really great for getting a sense of not; what are startups like in general, but what is one person’s experience in a very similar role at a startup? And that grounding, that very concrete set of discussions there can help you to explore and understand what your other career choices are, whether it’s either; Oh, boy, that sounds really great. Or boy, I really dodged one not going to that startup that gave me an offer as well.  

I think that’s what can be useful because you can find people who are at a similar stage or the next stage of your career to sort of learn from as you’re looking for that next one. And of course, as you become more senior in the career, maybe you’re the one who’s a little bit more senior talking to people who are junior and trying to help them navigate their path through a lot of really hard choices in your career. We have an abundance. I mean, despite the little bit of a pullback going through right now. You know, software engineers have a lot of choices for where they go next and what their next step is, and really understanding concretely, what could that look like, for me and what I like it is something you can really only do in these communities to understand whether it’s work, or whether it’s going back to graduate school, or whether it’s taking some time off and volunteering. How do I come back after I do that, those local communities are what gives you the story, and especially if the local bit helps you really bring it in because the things that are relevant to people in the Bay Area may not make as much sense in Chicago or San Paulo, or in Madrid, right? Each of our hiring pipelines, the environment, the expectations and the norms are very different. And so, making sure that you’re using those local communities to really get a good sense of what it would be like for you. 

Ayan  

Talking a bit more about the work that you’re going to be involved in the Rust foundation in general is like the new hottest kid in the block. So, with Linux adopting the Rust contribution, and now with the Web3 smart contract Solana ecosystem, what is the role of a general board member apart from influencing where it’s heading? Like, what sort of things are you responsible for in that foundation? 

Lars  

Well, I’ve been fortunate to be on this journey with Rust for a very, very long time, right? I joined Mozilla in 2016, when we were sort of just starting all of this work, and got to work on the new server, web browser. And when we were working on, Rust is just a new language for better implementing parts of the web, and then trying to see its adoption and seeing its growth.  

And really coming back to your question about the Rust foundation board member, like where we’re at right now, in the early years of Rust, we were just, can we even ship a piece of code to a real user that’s in a production device? We didn’t even know, right. And work with all the tools with the debuggers work with the would we be able to profile it? What would happen if the code crashed? Does it interoperate okay with all the existing C code, because C code is not going anywhere, right? It’ll be here long after I retire. It was really about answering those questions. And now with sort of the goals of the Rust Foundation and the project, it’s really asking, how can we grow its usage, right, as you mentioned, large tech companies, very tech focused places that have technology at their heart, have and are adopting Rust.  

Now, I won’t say there are no challenges, right? Interoperability is still hard. How do we train people? Could the language be more economic? Does it have all the tools, it needs all the libraries that are needed? Those are still big, open questions, but we have funding and support for a lot of that. 

How do we get it to the next group of people, that is the companies that are in other areas where their core business is not technology, but technology is at the heart of it. How are we helping them to adopt? And what are we doing to make sure that they can build the confidence they need that they can not only use Rust, but trained developers manage a team of Rust developers? How do they interact with their C++ developers? Where are they going to get training? In a lot of these industries, they care about certification. That’s not something that is really top of mind for a lot of high-tech companies. But it’s really core for a lot of the businesses that have a larger swath of developers supporting the business.  

How do I know this is a certified Rust developer that can do this work? And I’m not saying that’s an area we would necessarily immediately get into, but how can we meet the needs as Rust expands to these new companies and these new businesses. At a time when our demands on software are really scaling up, you may have seen the new executive orders from the US government around securing your supply chain, being able to verify every piece of software that went into your end product before it goes to the government. So, how are we scaling up everything that we’ve done with Rust into all of these new into sort of that next year of adoption and usage. And so, it’s exciting, but it’s a very different set of problems than when we were worried about whether the debugger would be able to show local variables in the stack frame, which I intimately remember breaking every three weeks, right? And right now, we’re not at that point anymore. 

Ayan  

So, from your Mozilla days, I’ve seen your work a lot in augmented reality, virtual reality, mixed reality sort of things. So that’s an open-ended question. Do you think that anytime we’re going to be sitting in Metaverse sharing a small circular table and having this sort of podcast? 

Lars  

I hate to play the definition game here. But it really depends what you mean by Metaverse like if you’re if you’re on the far end of the Sci Fi spectrum, which many of the folks I’ve worked with are, where I’m in a sensory deprivation pod, and I’m living in, a fully digital world having my meetings, I think we’re pretty far off. If you are looking at it more as how am I interacting across mediums with virtual representations of people to perform some task, whether it’s a conversation, as you mentioned, like this one, or that, I would argue we’re already there for a lot of it. And a lot of the work is really around how we anchor the use cases.  

So, when I’ve seen the growth of the technology over the years, right, we went from VR where it was just for gaming. And then the next explosion was really around video consumption and 360 interactive content. And then the next explosion was around social platforms getting together to play games and hanging out. And then the next explosion was around exercises and fitness during the pandemic. And when I looked at each of these things that brought in millions more users, there was some technology component, there was some element of the devices that got better at something.  But it was paired with some specific use case. There was something people wanted to do in the virtual space, either alone or together and were enabled by this technology that was richer than what they could do in the virtual world and so, or in the physical world today with the existing set of technologies.  

So, when I look at the roadmap here, and the metaverse, I’m much more interested in what are the new capabilities around remote collaboration around what kinds of conversations we can have. When we talk about Mozilla and some of the stuff that we were building, there was this Hubs, proud of that project which continues to grow, very proud of the work that team is doing there. One of the things that I thought that was most interesting there, that hadn’t really occurred to me was that audio was really the key more than any of the visual aspects. Because when we have a conversation like this talking heads on a screen, really only one person can be talking at a time. And so, the key takeaway from the products we were building there was that you could have multiple conversations, because if we had eight people in the room, they could move off into corners. And just as it did in physical spaces, you could do that.  

And so when we think about okay, so now we can have meetings where people are breaking out and coming together, something that’s really hard to do in our modern Chat programs, but it’s very seamless within this virtual environment, like okay, now, now we’ve got… that’s a product, that’s a feature, that’s a thing, we can now do a new capability that we have as people that pulls me into these devices, because these devices are really high friction, right? The biggest question we had around the products was:  what are we going to do that gets people to put them on their face? Putting these things on your head even with the most comfortable headsets is just not pleasant. I mean,  I don’t like wearing glasses. And so what’s really going to get us there in the VR and AR space, and what are those really key use cases that are going to light up that are not just an occasional thing, it’s not once a month, it’s maybe once a week, or maybe it’s a few times a week, to the point where it becomes daily. And once it becomes daily, ​​

I think coming back to really answer your question, it’s once we have use cases that every day are worth the friction of putting on devices that require more work than just walking up to a screen. That’s sort of where we’re at a point where I would say, we’re now in the metaverse.

I don’t think it’s like a sacred long game, it just attracts lightning bolts in a way. But what I’m super interested in is how we are helping people do new things that are difficult to do today that are facilitated by the set of technology and services.  

Ayan  

Do you have a book that you think everyone should read? 

Lars  

Well, number one, so I’m a longtime supporter of public libraries. I love donating to them, I love volunteering with them. And so, I don’t want to get super caught up. Like all reading is good reading, like building the habit of reading is the most important thing. And so don’t get too intimidated by you have to read this book, you have to learn this technology. ‘Hennessy and Patterson computer architecture book is the only way you can learn architecture; this is the only way you can learn a language’. 

Like if you find things that engage you the progress, the learning, the thinking is the most important part. Getting out there and supporting your local libraries is really important from my point of view. But to answer your question more directly, because everyone does have sort of one book they’d like to recommend sort of in the people management space. I really love this book from the 80s. It’s called Peopleware by DeMarco and Lister. And if you haven’t read it, it’s just a fascinating read, because they did a whole bunch of basically productivity studies on developers and their work environment and what makes not only developers, but teams really be successful. And many of the things that came out of that book are things we still puzzle over today and get confused. It’s actually the origin of the term ‘10x developer’.  

It’s interesting to go back and read it, because they were doing these productivity studies on developers using some coding tests, and was really interesting, because the thing that came out was that the thing that contributes to being a 10x developer is whether you work in an environment with a mostly quiet private space where you are not interrupted during the day, there was no other control, it was not related to intelligence in any way. It was not related to your degree, it was not related to your background. It was solely were you able to build your skills in this craft and in a place where you are not disturbed. And you are able to do work, like real work, whether it’s flow state, like people mentioned, and it’s been twisted into this really weird techno abrasive techno nerd thing.  

And it’s interesting to see that journey, especially in an environment where we’re looking at returning asking people to return to the office, and many of these offices are open floor plans, and are very noisy, and many of our changes in technology have this sort of hyper aware like, are you on chat, we just opened a bug. Did you read the bug comment? Did you respond to it? And a lot of the data that we have shows, the more responsive people are and the more noisy their environment is, all their productivity goes down. I liked the book for re-grounding myself in some of that stuff, but also can be useful to sort of track down some of these terms that have just gone totally kind of sideways in popular culture. It’s just a fun read. This is a very easy casual read. It’s not technically very challenging, so I highly recommend it. It’s one of my favorites. I reread it probably every four or five years, just because there’s always something new I pick up or that I’ve forgotten over time I come back to it over and over again, if kindles had dog eared pages, the book would have the spine would be broken, and the pages would be dog eared on that one. 

Ayan  

Thank you for the recommendation. And I could totally relate going back to some things for me. It’s this blog by Sam Altman. It’s called “The days are long, but the decades are short”. So, this is something like I keep going back every now and then to remind myself that this is something that I really resonate with. So, I totally understand and thanks for this recommendation, I’m definitely going to add it to my reading list. The next easy one for you is what are you most excited about in this evolving technology world at this moment? 

Lars  

I think although software and compiler sky, really, the innovations in hardware, are the things that over the last 10 years, have really impressed me because if you look at, we had video cards, and then people figured out how to run general purpose programs on top of video cards. And then people realize that  now we can do a lot of computational work that was infeasible on CPUs if we have these cards. And then people started building accelerators. Then they started moving those accelerators onto chips. And that’s really what has enabled the AI revolution. That’s what’s enabled short form video, it’s what’s enabled a lot of our work with filters and overlays. And so, it’s only been in 10 years, right? That is a super short. 

I mean, it’s long if you’re not as old as I am. But from the point of view of technology, we have so much innovation coming so quickly in hardware, and the hardware is now adapting so quickly to new use cases and needs. And we’re seeing all of the architectures out there adopt and adapt to these new technologies, where it used to take a very long time for something to go from an idea to a new instruction, to new support in the CPUs, like seeing that shrink to, from decade to years, to now some of these things are running in quarters. Right where we can go from, we have some new kind of AI model that we want to either train or execute to a piece of silicon that we can actually put in a CPU that makes this possible to run within our power performance cost envelope budget. That’s really neat.  

When I grew up all of these things with AI were no, everything we see around bland, GPT, all of the math that underlies it, right? This was all known. This was old stuff in the 90s when I was going to school, right, but it was computationally infeasible. And we didn’t even think given the growth of transistors that this was ever going to be feasible that we’d be able to do billion and trillion parameter model training. And so the hardware changes that have enabled all of this, in my mind are some of the most interesting things because there are so many things that we think are infeasible that, well, if we just throw enough custom hardware at it we can really tune what we’re doing for it.  

And so how do we continue that trend? What does the next even five years look like with that trend? And what other things that are even more exciting, are we going to be able to do given very, very highly customized, capable hardware that makes it possible to do this work? 

Ayan  

Well, I’m exactly the same thing that I’m very much excited about, given the fact that I feel that something that’s happening again, and again in software, that tends to make its way to hardware, like it’s been cryptography, six-seven years back. Now, every new chip has a cryptographic unit onboard, so this can be offloaded to that unit. And same is going for ML and Apple coming with their own silicon and tensor units for Google. So that’s exactly the same thing I’m very much excited about. And as you mentioned, it’s really fascinating to see where we are heading, even if we are not following the Moore’s law, but we are still very much you’re not keeping up with the hardware of generational revolution, I would say, and I’m sure it’s going to, it has to be really hard being a compiler’s guy and always guy to keep supporting all the things that are coming up in the hardware.  

Lars  

It’s an infinite deployment. As long as they keep coming up with new instruction sets and new construction. They’ll still need compiler folks. 

Ayan  

As long as the documentation is good. So, do you have a favorite piece of tech as of now that you would say that I can’t start my day without? 

Lars  

I really liked bone conduction headphones. I don’t know if you’ve ever used a pair of these. They are absolutely fabulous. Just because not just for the fitness side of it, which is really great for being out and exercising. But it’s important to me to be able to be present with my family. And even if you’ve only got one headphone in your ear, it still makes it hard to hear a young kid. Nicola would say, Dad, did you know how many exoplanets there are in the solar system. And if I constantly have to pull it out and say what,  that just doesn’t feel like I’m present.  

But I do like to listen to music throughout the day, or podcasts or other things. And so being able to use bone conduction headphones, let me still be present in the world with my family at the gym with people around me aware of my environment without sort of having something in place there. 

I would say, that’s really the piece of tech over the last year or two that’s really just sort of jumped into my life where I was like; I don’t know, is it going to feel buzzy? How am I going to like this? Where it just became like; No, I like every day, it’s on my head a lot of the time. So I’m really impressed with how good that technology is -again, coming back, like our other hardware statements- how much better the sound quality has gotten even year to year with these devices. Yeah, I mean, 

Ayan  

I mean, technology, giving our life back, yes, I’m sold. It has been a really great time discussing all these things with you. Thank you for your time and doing this. But before we wrap up, I just want to ask, if someone’s listening to this podcast and feel very much inspired by your career journey and want to follow a similar one ; since you have been into the software industry, and having written a lot of code back in the time, now being a stakeholder of a project of this magnitude, and also influencing the direction tech is heading, make this sort of career journey, and given the fact that you also hold a PhD. How  important is it to go through the traditional route?  Because I’ve seen a lot of next generation software engineers who have never attended a professional degree course, but are taking the courses, books and all those things, they’re still very much managing to find their way into the industry. What is your advice to someone who wants to take a similar path with you? What are the right things that they should be doing in their life to be at this position? 

Lars  

That’s a huge question. I think one thing that I really need to point out about my own career is that I had no idea this is where I would end up when I started. I joined my first job. And I thought, 20 years later, I would retire from that first job, this was it, that’s where I was going. I know other people have plans they come in, they’re like, I’m going to do a startup. I’m going to race after that. There’s two parts here. 

 One is the career and one is the education. A large part of it is that these ambitions in the abstract are good to think about, but they’re very stressful to anchor yourself on and feel like, I have to make a director or vice president within seven years, or I have to run my startup and stuff like that, it can be very stressful on you. Because most of what you have control over is not where you’ll be in 5 years, or 10 years. It’s what decisions are in front of you, what is your decision in the next two years? Focusing on how am I building a lot of skills right now, in the role I’m in, how am I making the best use of my time here in the job that I’m at? And then at each point, what is the right decision because programming languages were not really on the rise when I entered the field, right.It was just kind of opportunistic that when I got to where I was programming languages were very important, but you can’t anticipate these larger trends.  

The same thing with AI when I was in grad school, I had some colleagues who were working in the machine learning space, when it was not a hot topic, right? People were not very cool on it, and then just kind of at the end, so I want to acknowledge that there is a bit of fortuitous luck that you cannot control for.​​

I really focus on what you are doing that’s helping you grow.  And what is interesting right now, what do you think is a role that you are actually glad to be a part of and so that really ties into some of your questions about schools and education.

I think about it from two fronts. One is there are a set of skills that are hard to get without potentially without structured mentoring, a PhD process, it’s more about the mentoring that’s having an experienced researcher who’s teaching you how to do research, which is something kind of like management, where you can read books about it, but it’s really about the actual experience and having someone there to mentor you and grow you there. So, if the thing you need requires a PhD you should go get a PhD. Things I needed required a PhD, I went and got one. I wanted to do research in programming languages. That’s kind of that in many ways even though it’s a long and hard track like grad school was unabashedly the hardest thing I’ve ever done and probably will ever do in my career.  

But it was the easiest path to get into the roles that I wanted to house afterwards. If you can get the roles without it, that’s fine, and whether it’s a bootcamp, a professional masters or other degrees. One thing that those do confer beyond the learning can be that they often have a network that involves a placement network that either is direct portals into job opportunities, or a network of peers who have been through that program who can help you expand that work.  

If the thing that you’re worried about is maybe not the specifics of the program that is, how to learn and write the code and that. What you’re using it for is that network. We talked about certifications on the rough side before, these things are the certification to potential future employers, that you can perform the task or that get you past that first level of gatekeepers that are keeping you from getting the interview, to have the conversation with the job, but I don’t want to tell people that they thave to do those kinds of things. But I do want to acknowledge that those gatekeepers can be a real challenge particularly for people who are from a non-traditional background of any kind, whether it’s internationally or racially or culturally, that getting past it can be really, really hard and super frustrating.  

And sometimes, it can be a huge leg up or make things much easier for you to go through those programs to get the certification that has the right name on it to get you through the door, so that you can then show those skills that that you can develop in part on your own, and possibly in part through the program, but I never say that they’re mandatory. But I do also want to acknowledge the reality that getting through those gates can be really hard and unfairly and unequally hard in many cases. 

Ayan  

Thanks a lot for doing the podcast, Lars. It was really amazing. I couldn’t ask for a better start of this podcast. So, I’m sure we’re going to be getting new again very, very much soon and talk more on this. Thanks for spending this time. I’m sure a lot of people in the community will get inspired and learn a lot from this one. I had a great time. I hope you are too. Thanks a lot, and have a good one. 

Lars  

Thank you for the great questions. And I wish you all the best both with this and all of your future podcasts. I will definitely be subscribing and listening to them.  

Ayan 

Thank you so much. Have a good day.  

Lars 

You too.  

Ayan 

Bye. 

Categories
Community Tips

How Much Does It Cost To Appoint iOS Programmers?

If we consider the current scenario, then people nowadays utilize different categories of solutions to satisfy their purposes. Especially after the COVID – 19 pandemic, usage of smartphones has been bolstered to a considerable level. As a result, there was a massive rise witnessed in the utilization of applications among users. Since then, the usage pace has never slowed, and it has continued increasing till the current date.

It’s a truth to be told that Android devices are utilized in maximum numbers, but Apple devices are no more behind, as they stand second in global usage of smartphones. Over the past few years, the utilization of iOS applications has increased tremendously, and it’s because more than 1 billion users use iPhones, as per 2022 statistics. 

You might be fascinated to hire iOS programmers from an IT company for creating your business solutions and grab an advantage of rising requirements for iOS applications among users, which you might have derived from the figures mentioned earlier. 

So, refer to some things that should be kept in mind while hiring iOS developers and the cost of appointing them are discussed further in this post. Reading all those sections would reduce your hassles significantly for hiring them from firms to get an application for your enterprise ready.

Qualities To Be Considered While Hiring iOS Coders

When appointing iOS coders, you, as an entrepreneur, must ensure that they possess several characteristics to create your iOS solution for an enterprise. Which are those? They are stated below:

Must Possess Knowledge of Swift 3.0

It is an object-oriented programming language by Apple, which has a simpler syntax to access specific functions, making it easier for programmers to adopt. The iOS developers using Swift programming language can create a dynamic application loaded with demystifying features. So, you should appoint iOS coders having knowledge of Swift 3.0 and must be capable enough to deliver you the solution for your business with top-notch performance.

Experience in Xcode

You, as a startup owner, should know that the iOS coder you are looking to hire must possess Xcode IDE(Integrated Development Environment) in their skill sets. It is a solution that contains tools for debugging, interpretation, compiling, automation, and programming procedures streamlined for iOS developers while creating your application. By appointing iOS programmers to develop a solution for your business, you will also be charged a lesser fee for developing and deploying the platform, as Xcode makes such processes much more straightforward. It suggests that hiring iOS coders can assist you in building a platform with fewer expenses.

Problem-Solving Skills

Receiving the solution created by iOS developers is fine, but they should also be capable enough to quickly solve problems with any level of complexity. It is a must that you, as an entrepreneur, must appoint those iOS programmers who possess sufficient knowledge to get rid of any issue popping up in your application rapidly. 

Secured Application

You might be aware that the ios app store doesn’t allow an application to get published if it doesn’t match their set security standards. Hence, as an entrepreneur, ensure that the iOS coder you hire delivers a safe and secure platform to you or not for launching it in an application store.

By keeping all these things mentioned above in your mind, as a startup owner, you can look for iOS developers to hire from specific companies able to provide you with a helpful solution for your enterprise. It will assist you in appointing a perfect iOS programmer who is dedicated and skilled to offer you desirable and practical application for your venture.

Cost To Appoint iOS Programmers

Now, after knowing the several elements to remember while hiring iOS developers, you should see the cost of appointing them. There are numerous parameters that play a vital role in the costs of recruiting iOS programmers, out of which a few of them are mentioned below. Refer to each of them before analyzing the prices of iOS coders:

Complicacy

It is an essential component contributing to the cost of appointing an iOS coder to build a solution for your venture. The complicacy of an application includes:

  • The number and types of features.
  • The design of a platform.
  • Third-party apps to be integrated.
  • The specific database you select for storing user data of your application.

So, if you are thinking of building your iOS solution, then consider all these things about your app to be created. It will assist you in saving additional expenses after appointing iOS programmers.

Number of Coders

The cost also depends on a number of iOS programmers tenant by specific technology partners. The companies need to pay a certain amount to developers occupied working on your project, which relates to your application’s complexity, as discussed earlier. The rates of hiring iOS coders would likely be high if you want more attributes in your solution to be implemented, as a specific number of developers hired by you would not be able to work on other pending projects of the firm.

Experience

Based on how experienced an iOS programmer you have hired, the fees would be charged to you by them accordingly. It is because they will help you to avoid specific issues during and after creating the application for your business from their side. In addition, they will also provide you with a bugless application so that you don’t need to spend more money in the future to maintain your solution. Therefore, it’s suggestible that you should appoint a well-versed iOS developer that doesn’t charge much higher nor too lower fees for building your app.

Development Location

At last, along with covering all these factors, the cost to hire an iOS programmer is finally decided by the company, based on the development location. The charges for appointing an iOS developer from any specific country are determined based on their costs of living, hosting charges, and fees charged to them for accessing a particular function. Following are the rates of hiring iOS coders from different countries mentioned. Consider the table below to get an idea about appointing them from a specific location.

CountriesHourly Costs of iOS Developers(in $)
Australia$45 – $65
India$20 – $60
USA$60 – $90
Switzerland$55 – $80
Netherlands$50 – $75
Canada$35 – $70

Final Verdict

In the last few years, usage of iOS devices has skyrocketed to the next level, so numerous ventures have launched solutions in an Apple store to receive the advantages of increasing demand for its apps among people. Apart from this, many startup owners are planning to build their iOS applications for their enterprises, and if you are one of those, then refer to some qualities while appointing iOS programmers and the cost to select them mentioned in a post. It would help you in getting a clearer vision for hiring them.

Categories
Community Tips

Debugging Techniques For Python Developers

Debugging is an essential skill for any programmer. Mastering this skill can help you identify problems quickly and effectively in your Python code. Without knowing how to debug code, developers will face endless hours of frustration trying to solve problems.

Fortunately, Python’s built-in tools and debugging techniques make it easy for developers to identify and fix errors without wasting too much time. To help you get the most out of your Python coding experience, this article contains a list of the top debugging techniques for Python developers. But first, you must know the importance of debugging and its practical use cases in the developer community.

The Importance of Debugging

As mentioned, debugging is among the essential Python skills that all developers need to know. A common misconception of debugging is that it’s only necessary for complex projects. In reality, debugging should be part of the development cycle of any project, regardless of its size or complexity. 

This process helps you identify and fix bugs in your code quickly and efficiently. It can also help you better understand the program’s flow of execution, which enables you to make more informed decisions about improvements or modifications to the code. 

Debugging Use Cases

A common mistake of new developers is to assume that debugging is only done to correct errors in code. In reality, debugging is used for more than just fixing errors. Here are some of the most common use cases:

  • Handling Python code errors that occur during program execution. Errors can be caused by incorrect syntax, type errors, name errors, etc. Different types of errors can occur in each code, and good debugging skills can get you out of a jam.
  • Investigating problems with code logic or implementation. This could include issues such as unintended infinite loops or unexpected output from functions. Debugging can help programmers determine the root cause of these issues and identify solutions.
  • Testing code for desired behavior. Debugging can be used to test if the code is working as intended. This could include checking for outcomes from functions, or ensuring that calculations are performed correctly.
  • Locating and removing code that is no longer necessary. As a developer, you should know that code can become obsolete over time. Debugging allows you to identify and remove obsolete or redundant code from your project. This could include dead code, duplicate functions, or redundant variables. 
  • Identifying potential performance issues in your program. Poorly written code can significantly slow the running time of a program. Thus, accurately tracking and diagnosing these problems is essential for efficiency. And yes, debugging can help with that.

Common Debugging Techniques For Python Developers

Now that you understand the importance of debugging and its various use cases, here are some of the most helpful techniques for Python developers:

The “print()” Function

The simplest way to debug a program is by using the print() function. This can be used to debug programs by displaying values in real time. But how, you may ask? This function allows you to print out variables and values to gain insight into what is going on with your program. It also helps you identify errors that appear during the execution of your code. Through this function, you can easily track the program’s flow of execution and identify any potential problems along the way.

Integrated Development Environment (IDE)

An IDE provides a suite of tools to help debug code more effectively. With features such as syntax highlighting, auto-completion, debugging consoles, and breakpoints, it allows you to quickly identify and fix errors without having to search through your code manually.

An IDE is present in almost every programming language, and Python is no exception. Popular IDEs include PyCharm and Visual Studio Code as the go-to choices for many developers. If you have the resources, you can try out different IDEs and find the one that works best for you.

Debugger

A debugger is a powerful tool used to step through code line by line. It can be used to inspect variables, set breakpoints, and trace functions as they execute in real-time. This helps you identify the exact source of an issue quickly and easily.

The Python debugger, known as pdb, comes installed with Python. It allows you to inspect the flow of control in your code. You can also set breakpoints with pdb which allows you to pause at specific points during program execution so that you can investigate what is going on at that time.

Logging

Logging can be used to keep track of errors and detect any unexpected behavior during the program’s runtime. This provides you with a record of events that can be used for further investigation into the cause of an issue. Many seasoned developers use logging as a reliable way to track errors and identify improvement points.

The logging module in Python allows you to create basic loggers that can be used for debugging purposes. This module also includes more advanced features such as custom levels, filtering, and formatting, making it even more powerful!

Conclusion

Debugging is one of the most critical aspects of development that every professional developer should learn. You can quickly identify and solve problems in Python code by learning and mastering the debugging techniques listed above. Remember, debugging is an essential part of the development process, so learning how to use these techniques efficiently will help you become a more productive and successful developer!

Categories
Tips Tools

Integrating Test Automation In Small Tech Business: Advantages And Disadvantages

Software testing verifies that the software or product meets the technical requirements of the project and works as expected. It checks for bugs and errors to ensure that the product delivers an ideal user experience. Software testing is vital to the success of the project. However, it could be time-consuming and stressful to execute without using automation tools. Simply reviewing the entire project manually could be a massive burden on the testing team, especially in the case of heavy-duty software.

It has become increasingly important for small tech businesses to integrate software automation testing in their development process. Testing automation tools allow testers to perform the tests with greater accuracy and efficiency. The tools handle the bulk of the grunt work so the testers can devote their time and attention to more critical tasks. 

This article will discuss the advantages and disadvantages of test automation for small businesses.

Advantages of Test Automation for Small Tech Businesses

Test automation can help small tech businesses in various ways. For starters, it can help them to streamline their operation and improve the quality of their product or service. Here are some more advantages of test automation to small businesses.

Increased Efficiency 

Automation testing helps the testing team to save time and be more efficient in the testing process. For instance, In manual testing, the testing process is entirely left to the testers, so testing can only happen during working hours. On the other hand, a test automation approach does not require manual intervention, so it can be executed around the clock; the testers can set it on the schedule, thus saving  time and getting conclusive test results faster.

Test automation could also be run on multiple devices simultaneously, further speeding up the testing process and reducing the testing time.

Improved Accuracy 

Small tech businesses looking to perform more thorough testing can benefit from the improved accuracy of test automation. During manual testing, you have to rely on the expertise and exposure of the testers. They could make mistakes, especially when they have to perform repetitive tasks. The quality of the tests could decline as the project becomes complicated. On the other hand, automation tests are highly repeatable and consistent; you can run automated tests severally without any reduction in thoroughness.

Test automation can reduce the risk of human error so you can get the best quality results.

Better Coverage 

Performing end-to-end tests on lengthy projects can be challenging with manual testing. The testers and developers may be unable to efficiently cover all memory contents, data tables, internal program states, and file contents to ascertain if the software works as expected. 

With test automation, you can increase the depth and scope of tests to review all parts of the software. It can help you to create more complex test cases, test more features, and improve the overall quality of your software.

Early Identification of Issues 

Test automation can help you to detect bugs and errors earlier in the development process. This helps to speed up the development process while ensuring that smaller problems are attended to before they transform into more complicated issues. 

The earlier the defect is identified, the easier it is to fix it and the more cost-effective it is to resolve the issue. According to IBM Science Institute, a bug discovered in the testing phase costs fifteen times more than a bug discovered in the design phase, and a bug discovered in the implementation phase costs a hundred times more to fix than a bug in the design phase. You will save more money if you can uncover all the hidden errors earlier in the production process.

Disadvantages of Test Automation for Small Tech Businesses

As the famous saying goes, “every coin has two sides”. The same goes for test automation. Test automation may offer some disadvantages for small businesses. Here are some of the possible disadvantages of test automation.

Initial Cost 

Small businesses may be unable to afford the high initial setup and implementation costs. However, this depends on the scope and complexity of the project. Larger projects require more time and resources, which may cause a tremendous financial strain for small tech businesses.

Maintenance Cost 

They also have to deal with the cost of maintenance. Automated tests must be constantly modified and maintained as the product changes to ensure that they continue to function effectively. For example, suppose there is a modification to the software’s user interface. In that case, the testers must update the test scripts to reflect the new change. This can be time-consuming for the testing team.

Lack of Flexibility 

Automation testing is not as flexible as manual testing. As automated tests are designed to test specific scenarios or situations, they may have difficulty adapting to changes or unexpected results.

Not Suitable for Open-Ended Testing

Open-ended and exploratory testing involves randomly testing the products to check how they behave under different conditions and uncover unforeseen issues. Automated tests have a defined purpose, making them unsuitable for tests that need to be performed randomly.. 

Categories
Tips

Top career aspirations amongst student developers

Having long-term career aspirations can provide students with a sense of direction and help them make appropriate choices in their pursuit of knowledge. In turn, this speeds up their professional development and increases the likelihood of them achieving a successful career. In this chapter, we will take a closer look at the top career aspirations of developers who self-identify as students.

Solving problems is the top career aspiration among student developers, mentioned by nearly a third (32%) of them. This is closely followed by becoming an expert in a domain or technology (29%), building innovative products or services(27%), and working on challenging projects (26%). These findings suggest that, despite an apparent financial appeal,curiosity and chasing innovation are the primary motivators for students in their journeys to becoming professional software developers.

However, it is worth noting that maximising their earning potential is important for students too, ranking sixth on the list of top career aspirations.

Having good problem-solving skills when working on challenging projects is usually the key to building innovative products and services. As such, it is no surprise that these aspirations are frequently mentioned together by students who want to become professional developers.Those who want to build innovative products or services show an above-average level of interest in becoming entrepreneurs or working at esteemed companies. Furtheranalysis reveals that aspiring entrepreneurs are more likely to focus on maximising their impact on society, while those who express a desire to work for acclaimed companies show more interest in pursuing challenging projects.

Students who seek to become tech executives or company leaders place significantly lower importance than average on the most popular career aspirations. Instead, they prioritise building their own businesses while also showing an above-average level of interest in getting a specific job title. This is likely due to them being naturally career-focussed and prioritising pathways that will allow them to achieve their long term goals. On the other end of the spectrum, those who want to maximise their impact on society show a similar level of interest in building their own businesses. These developers are the most likely to aspire to build innovative products or services while also showing a high level of interest in mentoring and helping others grow.

As with most other topics, regional differences in culture and socio-economic circumstances manifest themselves as significant differentiators in career aspirations amongst student developers. For instance, South Asia is the region with the highest concentration of developers who self-identify as students (40%). In this region, 30% of students aspire to work on challenging projects -their top motivation-but are significantly less likely than students in other regions to show an interest in solving problems (26%) or building innovative products/services (22%). Instead, South Asian students are the most likely to prioritise obtaining a specific job title (16%) while also showing an above-average level of interest in becoming tech executives or company leaders (15%).

Students in South America, Eastern Europe, and Western Europe show the highest levels of interest in the global top-four career aspirations. However, while European students are significantly more focussed than average on maximising their earning potential (>30%), only 21% of their South American counterparts prioritise this when planning their careers. Instead, South American students are highly focussed on securing job opportunities at esteemed companies/organisations. In turn,they may be more likely to accept junior positions and lower salaries in exchange for job security and a promising career path.

East Asian students are the least likely to express a specific interest in becoming professional software developers. This suggests that students in this region have doubts about pursuing careers in software development and may be looking at other, unrelated jobs. Similarly, students from theGreater China area show below-average levels of interest in many of the top choices. In particular, we find that only 6% of them prioritise building their own businesses or becoming entrepreneurs, which is 19 percentage points below the average of the other regions. However, maximising their earning potential appears to be the key driving force behind why 33% of the students from the Greater China area want to become professional developers.

In North America, a high portion of students aim to become entrepreneurs while also showing the highest level of interest in maximising their impact on society. This is likely due to the highly prominent startup culture in this region. This effect is most apparent in Silicon Valley, which has established itself as the nexus of technological innovation and is home to many tech giants and startups. Similarly, students from the MiddleEast and Africa also show high entrepreneurial spirit in a region that is primed for a booming startup scene. In addition to this, the students in this region are the most likely to prioritise transferring their knowledge and experience to the next generation (28%).

Categories
Tips

Best way to hire a Senior Java Programmer

Without a reliable and trustworthy web application to depend on in today’s competitive business environment, it might be difficult to prosper and survive.

A website not only provides a multitude of features and services, but it also makes it extremely easy for business organisations to organise their work and improve their internal communication via the use of several web-based apps. Java has been actively employed by developers to give high-end software and online apps to customers regardless of whether they are working on the internet or an organisation’s private intranet.

In the following section, we are going to talk about the multitude of benefits that this platform offers, as well as the reasons why you should hire Java developers. Read on for more information.

Java is now one of the programming languages that are in most demand worldwide. Because of the important function, it plays in the operations of your main company, you will need to find the most qualified individuals to join your team. Everything you need to know to successfully attract Java developers is included in this guide.

Although Java is a general-purpose programming language that uses statically typed expressions, it is also an object-oriented and concurrent language. Java was intended to be a WORA language, which stands for “write once, run anywhere.” This means that the language should be able to operate on any platform and with as few dependencies as possible with the support of the Java Virtual Machine (JVM). There is no such thing as speed in languages; all that is required is linguistics. If you want to assess how quickly anything is implemented, you need to choose distinct implementations to compare with one another. Backend web development often makes use of languages written in Java. Backend web development refers to the portion of web development that is concerned with the creation of the software system that may be executed on the server. According to a poll that was conducted among developers on Stack Overflow, java is the most prevalent kind of development.

Java is an older programming language, yet it is still widely used

In the early 2000s, commercial applications were among the first to start making widespread use of Java. It was designed with a few primary goals in mind, including ease of use, durability, and mobility. It is clear how these fundamental characteristics contributed to Java’s rise to prominence as a language of choice, one that is today used in every industry and application layer possible. All of these things may be developed in Java by making use of sophisticated frameworks and tools, including database access, system behavior, service publishing and access, and individual development (mobile, web, and desktop). In addition, Java can be found on every platform imaginable, from SIM cards in mobile smartphones to the high-end servers that operate the cloud. It can even be found on implanted and Internet of Things (IoT) devices. A software developer can’t make a mistake by deciding to study Java. Approximately 51 billion Java virtual machines are operating, which means that well-paying employment is assured for Java applications for many years to come. 98 percent of the Fortune 100 companies are actively employing Java workers.

Java is still one of the most widely used programming languages, and as a result, programmers who are proficient in Java are in high demand. The programming language is used by a variety of significant organizations to build and maintain their internationally recognized products. Java is well-known for the rapid processing speed it offers in software, computer games, and apps for desktop computers as well as mobile devices. It is used in the process of developing software as well as web-based applications for a variety of platforms. It has gained a lot of popularity because it is simple to use for newcomers, even though it may still take some time to grasp.

The creation of programs and software via the use of the programming language Java falls within the purview of a Java developer. A Java developer is a specific sort of programmer that may work in conjunction with web developers and software engineers to incorporate Java into commercial applications, software, and websites. C#, the primary rival to Java, is seeing a decline in market share, in contrast to Python’s competitors R and Ruby, which are more or less remaining stable. This post demonstrates the procedures that need to be taken to hire an acceptable Java developer, which is a challenging process in and of itself. Let’s begin by discussing how to choose a qualified candidate out of a heap of resumes submitted by Java engineers.

A Brief Observation Regarding the salary of Java Developers

You may be wondering what elements have an impact on the salary of a Java developer. There are two primary contributions, which are as follows:

  1. Experience. Even within the seniority level of a Junior Java developer role, more experienced applicants anticipate earning higher money. If you are in the process of recruiting for this position, keep this in mind.
  2. Skills. Developers that possess talents that are in higher demand will be compensated more. Candidates that have expertise in Java/J2EE are often compensated at a higher rate on average. In addition, since developers are such an important part of the process of producing your product, you should look for ones that share the values of your organization. In the long run, it is to the advantage of both parties since developers who are enthusiastic about their work often better represent the company’s ideals in the end product that the customers view.

When looking to hire a Java programmer, what are the best practices to follow?

  1. It may feel like a never-ending hunt for a decent employee while you are in the process of looking for one. There is a significant amount of demand for highly qualified workers all around the globe, and this is especially true when recruiting Java developers is taken into consideration.
  2. Java is the programming language of choice for corporations since it is the most reliable, versatile, and safe option available. As a result of this, Java developers will be among the professions with the second greatest demand in the year 2022.
  3. When looking to recruit Java developers, you must find individuals who are not just technically competent but also excellent communicators and who are aware of what they are doing.
  4. But where can you get people with such qualifications? There are not nearly enough people looking for jobs who have these specialized skill sets, even though there is a significant need for them.
  5. When you confine your search to a certain location, whether it be a city or even a nation, you will quickly discover that the pool of potential individuals is far less than you would have anticipated. 

The following recommendations for searching for an appropriate Java developer:

  1. Employing a Java software developer: The first question that has to be addressed is, “from where can I hire java programmer?” The first place that employers search for people with Java development experience is on several job portals. However, there are online communities and specialized forums such as GitHub, Stack Overflow, and others that can give you a reasonable idea about the level of expertise of the participating developers. This is because people typically use these platforms to demonstrate their level of technical expertise. In addition to this, Java hackathons and conferences provide the opportunity for recruiters to physically connect with developers while also expanding their network of contacts.
  2. A good old-fashioned JD will do the trick: The job description must make it very apparent which particular abilities a potential Java programmer should possess to be considered for the position. Your efforts to filter applicants would be reduced as a result since individuals who exhibit these attributes are more likely to apply for the job. The JD ought to, in an ideal world, contain the requisite years of experience, the required skill set, the domain of the project, KRAs, and so forth.
  3. Examine Your Java Certifications There are many different kinds of Java certifications, and typically, Java developers will earn them to confirm their expertise and demonstrate that they are technically valuable. The recruiter saves a lot of time by having an in-depth grasp of these qualifications, which helps eliminate unsuitable applicants during the basic screening process itself.

What qualities must a Java developer have when you hire?

  1. Skill evaluations

It is necessary to do skill evaluations correctly: In an ideal world, the potential Java developers would have some familiarity with the languages, frameworks, and tools that are used by the JVM when it comes to developing, testing, and designing Java applications. A solid foundation of advanced-level object-oriented features and ideas is also required, in addition to the aforementioned need. Arranging for a developer to have a technical interview with either the team lead or the project manager is one way to evaluate the developer’s talents and level of technical expertise. In addition to this, his coding and debugging abilities need to be evaluated through the use of a practice round. This helps us determine the quality of the candidate’s code, which is another aspect of the evaluation.

  1. A superb cultural fit

No matter where you are in the recruiting process, a red flag should be raised if a Java programmer has the requisite Java competence but lacks the mindset to fit with the culture of your organization. This is the case even if they have the necessary Java expertise. During the interview process, Java programmers have the opportunity to exhibit their skills; but, before you offer them a contract, you should require that they meet with other members of your team. If you don’t sense a connection with that individual, it’s possible that they aren’t the right fit for you. When looking to hire a Java developer, finding someone who is a good cultural fit for your team should be one of your top priorities. You may need to broaden your search to find someone who can contribute to your team right away, so be prepared to do so. However, bear in mind that locating a Java programmer who is compatible with the culture of your business is not only essential when making new hires, but is also something to consider in the market for contract work. 

You may be able to find Java programmers who will remain with you for long-term projects and maybe even become permanent fixtures if you take the additional time necessary to verify that they are a cultural match inside your company.

  1. Problem-solving skills

Every Java programmer needs to have the ability to produce, deploy, and effectively manage code. In addition to these primary roles, they should also be responsible for fixing any problems that come up throughout the testing cycle and delivering implementable solutions. When making hires, you won’t only be able to glance at a candidate’s CV to identify whether they have the characteristics you want in a Java programmer; you’ll need to go deeper. To find out, you should put them through a technical exam in which they have to show their ability to solve problems. However, regardless of how capable a Java programmer is, if they fail to include any advanced techniques in their CV, you should be sure to investigate further to see whether they fit your requirements.

  1. A flexible technique for Java programming

Even if a certain set of skills may be necessary, it could be more beneficial in the long term to take a broader perspective and focus on recruiting for the future. If you do not do a thorough study of a candidate’s curriculum vitae while searching for the right Java programmer, you may find out that they have only worked with a single version of Java, which is probably not a suitable match for your company if you want to grow it. Even if a Java programmer has only ever worked with a single platform in their previous job, a developer who is passionate about their profession will make the effort to learn new skills that will help them in the long run. This is because new skills will help them stay competitive in their field.

Examine the perpetual and signed agreement marketplaces for a Java programmer who can exemplify technical ability while also being encouraged to gain new methods and widen on theories of Java knowledge. This will help you avoid hiring a one-trick developer and ensure that you are not hiring someone with limited Java knowledge.

Why Java Outsourcing?

Even while Java is the technology of the moment for major corporations and firms that often choose to engage a specialized Java developer to instantly solve any challenges related to Java, there are a variety of benefits to engaging an external agency for the development of your software. Work in Java development is often outsourced by businesses to make cost and time savings, and frequently to make up for a lack of in-house technical skills. As a result of the vast skill pool of software engineers available in a variety of locations, outsourcing Java projects have become more popular. 

Outsourcing has several benefits, some of which are listed here 

  1. If one chooses to outsource the Java development assignment, then the entire cost of the project will be reduced by a significant amount.
  2. There is no need for one to spend money on technology, elaborate systems, or infrastructure.
  3. While the team you outsourced to works on the project, you will have a lot more free time on your hands, which will allow you to concentrate on other important responsibilities.
  4. The selection of the team is a challenging undertaking, and the cost of the project will increase with each incorrect pick. Because you outsourced this task, you no longer have to worry about it.
  5. Talking to the customer support team at any time is the best way to have one’s questions answered.
  6. You are no longer responsible for HR or administrative matters. You just need to keep an eye on how the project is moving along as a whole.
  7. You do not have to make concessions because of the technological inefficiencies involved since you have the legal right to request a certain feature for the project.
Categories
Tips

Why Finding Programming Jobs is Difficult

A few years ago, I started guest lecturing and volunteering at a few of the coding bootcamps here in Chicago. I had a very non-traditional job search process (more on that in a minute), so it was surprising to me that so many new grads had a tough time finding their first roles.

Since then, I’ve realized that job hunting isn’t just hard for new software developers. There are virtually endless threads on Reddit (1, 2, 3, 4) bemoaning the process and how arbitrarily good programmers are rejected without reason after putting dozens of hours into the process.

In short, it’s demoralizing, but I’ve been on both sides of the table.

In my 12+ years in tech, I’ve been a software developer, an engineering manager, a CTO, and a founder. I’ve been in the hiring seat and the job-seeker’s seat at various times, and like many of you, I think most companies’ hiring systems are deeply flawed.

That said, there are ways to navigate it or work around it entirely. As an applicant, understanding how the system works and playing to your strengths can help make it a lot easier on yourself. So, in this piece, I’ll break down the hiring process from an employer’s perspective. I’ll share some of the reasons this process is so annoying (on both sides) and offer my perspective on how both sides can navigate it.

Why Is Job-Hunting So Difficult for Software Engineers? 

There are a number of factors at play in making job-hunting as hard as it is. Here are just a few factors:

1. Oversupply of Junior-Level Developers

Finding your first role is particularly hard for entry-level programmers, since the vast majority of openings are for mid or senior-engineers with 5+ years of experience. But, employers are somewhat justified because junior developers can be a risky bet.

Hiring a new software developer can cost tens of thousands of dollars. Add to that onboarding and training costs — which are significant for someone who’s completely new to the field — and it’s easy to invest $30,000 or more before they’ve added a line of production code.

Now imagine you make a bad hire.

It takes 8.8 weeks to dismiss someone, does damage to the hiring manager’s reputation, hurts morale, and the company has to recruit for that position all over again. Bad hires mean a lot of money and time is wasted, and most employers are extremely risk-averse (read fearful).

As a result, companies tend to be biased toward experienced candidates who are familiar with the language and frameworks they use. They tend to want proven contributors who are used to working in a professional environment and know all the tools of the trade.

I’m not saying this is right, but this is the economic case that any junior applicant is fighting against.

2. Outdated Hiring Practices

A lot of the frustration also stems from the fact that many steps in the process are not relevant to the actual job. Instead of testing for skills and knowledge applicable to their day-to-day work, applicants are made to jump through arbitrary hoops that often leave non-traditional and diverse candidates struggling.

> “But honestly, as an ACTUAL senior software developer, why do I have to brush up on things that don’t come up in the day to day often?” – Anonymous

Applicant Tracking Systems

For starters, ATSs, which are meant to help facilitate the hiring process and save everyone time, can be a huge barrier. Job seekers have to upload their resume and then fill out the exact same information all over again in most ATSs.

What’s more, many recruiters use these systems blindly.

Most ATSs will parse an application for keywords to determine if a candidate is qualified. If somebody wrote into their application that they’ve used Scala before, but they didn’t explicitly write that they’ve used Java, the ATS might tell the recruiter that they don’t know Java. A real engineer would know that the are closely related enough to be interchangeable in many environments, but naive recruiters may not.

This leads candidates to use hacks like (Amit Juneja’s here) to manipulate ATSs to get more positive replies.

While employers might save time using these tools, they’re clearly missing good candidates who just don’t know (or care) enough to game the system correctly.

Whiteboarding Sessions

Termed “whiteboard algorithm hazing” by David Heinemeier Hansson, the creator of Ruby on Rails, whiteboarding is one of the most aggravating experiences for job seekers.

This interview style, which is widely used by tech companies like Google, Facebook, and Amazon, asks candidates to spontaneously regurgitate any one of hundreds of algorithms that were last useful maybe 50 years ago. They’re asked to write out these algorithms on a whiteboard with no access to an IDE or any reference material.

Spoiler alert: this is nothing like the work that real programmers do.

In the job, they’ll get to work on their own computer using reference materials and all sorts of assistive devices. I’d argue that it’s more important that developers know how to actually look things up quickly on Stack Overflow than repeat algorithms by memory, but that’s just me.

Hanssen says as much in his blog: “I’ve known fabulous programmers flame out in the quizzing cage and terrible ones excel. So unless you’re specifically hiring someone to design you the next sorting algorithm, making them do so on the white board is a poor gauge of future success.”

So why do companies default to this method of weeding out applicants?

Some of it is laziness. Many managers do whatever the policy dictates rather than improve the policy. For others, it’s likely a form of elitism or bias. Many companies want to limit their applicant pool to people with more traditional computer science backgrounds rather than those with self-taught or bootcamp experience.

In any case, whiteboarding has forced many applicants to spend months brushing up on arcane programs like maze solving algorithms or the longest possible Collatz sequence, hoping that they get tested on one of those during their interview.

It has also spawned an entire industry of Online Judges — platforms where applicants can solve problems and spend time on coding exercises. LeetCode, HackerRank, and CodeForces are some of the most popular ones out there. It’s a lot like SAT prep for a job, except that you have to go through it again every time you want to change your job.

3. Job-Skills Mismatches

Finally, I see many developers struggling in the job market because they don’t have the right skills. This problem affects new and experienced developers.

For example, if you’re a senior developer who’s built a career working in PHP, but all the best companies are looking for Python or Golang developers, you’re going to have a hard time getting offers.

This goes back to point 1, but companies don’t want to spend money and time cross-training new hires. It’s expensive and risky, so they favor candidates who already have the skills they think their job needs.

The problem is that for many developers with a full-time job, family, and other commitments, it’s very hard to spend time learning a new programming language on the side. Keeping up with all the new technologies in this industry is one of the most common challenges of working in this industry.

So How Do I Get Hired? 

While there are movements being made against some of these arbitrary recruitment practices, many big companies have stuck with them. So in the meantime, how do you get hired and not get discouraged throughout the job hunt?

Here are a few pointers from my experience as a job seeker as well as conversations with fellow engineering managers:

1. Network, Network, Network

If you want to avoid the black hole of online applications, you need to build a network and reach out to people. I spend between four to eight hours every week building and maintaining my network.

Networking got me my first job right out of college and every subsequent job I’ve had since then. 

I started attending conferences and meetups very early in my career. As I began making connections, people started inviting me to speak at meetups and bootcamps, even though I was relatively early in my career.

I even kept track of all the people I met and got in the habit of reaching out to reconnect with them periodically. These efforts helped me avoid much of the chaos of traditional recruitment throughout my career. 

In a recent podcast on this topic I recorded with Taylor Dorsett, Software Engineer at Home Chef, he recommended treating each meeting as a learning process, especially when you’re young. “Can I learn something from this interview? Even if I fail at the coding problem, can I connect with this individual and learn something? [Through this] I actually had really good conversations with people and interacted a lot more afterwards.”

This mirrors my own experience. Even if the people I met weren’t looking to hire at the time, I stayed in touch. When they were hiring, I was the first person they thought of.

Whether you’re an entry-level programmer trying to get a foot in the door or an experienced one trying to find the right role, networking will make it a lot easier on you.

2. Contribute to Open-Source Projects

Another way you can distinguish yourself as a candidate is to get involved in a larger, existing project. There are plenty of open-source projects you can contribute to, and you don’t have to make major updates to help. Even bug fixes and documentation updates are valuable contributions!

As an employer, this practice shows me that you can learn an existing codebase, interact with others remotely, and think critically enough to make updates. Greenfield projects are rare in the real world, so showing that you can play well with an existing codebase is a huge asset.

3. Practice Intentionally

If you want to get hired, you have two options:

One: you can limit your search to companies which don’t have annoyingly arbitrary interview practices. Four Square, for instance, has ditched whiteboard interviews in favor of assignments you can take home. Pivotal Labs offers an engaging paired-programming interview style. Networking can help you connect with managers at a number of these companies, but believe me, there are plenty of them out there.

Two: you can spend a couple of hours every week practicing coding interviews. Doing LeetCode exercises is a grind, but you will get better at them over time. Platforms like AlgoMonster and Educative can also help you learn in a more structured way by understanding the patterns rather than memorizing the answers.

You can also practice with mock interviews. I haven’t used it, but Interviewing.io is a well-respected resource where you can anonymously practice interviews with Facebook and Google engineers.

4. Share What You Know

Finally, if you’re looking to stand out from other candidates and have more opportunities come to you, educating others is a great option.

Writing tutorials, recording YouTube videos, or creating an online course is a great way to build your personal brand and prove that you’re worth hiring. I wrote regularly my whole career as an engineer, and many of the blog posts I wrote led to job offers, consulting work, or new connections. Honestly, it’s why I still write pieces like this one, and it led me to create my current company, Draft.dev.

Sharing your knowledge is a great way to help others while showcasing your skills and building an online presence.

Conclusion

The software development field is still growing exponentially and there’s a significant shortage of qualified talent in the space. 

While job hunting can be a huge pain, this is still a good field to be in. But if you’re picky, you may just have to fight a little longer to find that perfect role. Meeting new people and building a body of work you can showcase is a tried-and-tested hack to stand out as a candidate. 

If you found this article helpful or have thoughts of your own, I’d love to hear them. Leave a comment or find me on Twitter to continue the conversation.

Categories
Community Tips

The Rise and Fall of Web Frameworks

Web frameworks speed up and simplify the web development process by providing developers with a set of high-level APIs that allow abstract access to underlying system resources and other low-level functionalities. In this article, we look at how web frameworks have risen or declined in popularity, and we explore the profiles and technology use of the developers who use them. 

The big picture of web usage framework

Born out of the necessity to provide consistent web experiences, frameworks revolutionised how web developers create our online world. With standardised approaches to development and framework-specific communities available for support, they are still a popular choice amongst web developers. According to our survey data, 60% of web developers use either client-side or server-side frameworks. 

Indeed, web frameworks often present a time-saving option for web developers to do their jobs in simple and efficient ways. When turnaround times are tight, developing a website or a web app from the ground up may not necessarily be the best option, particularly when working with demanding clients. Indeed, when we look at deployment frequency, lead time, and time to restore service, framework users are likelier to be at the elite efficiency level. 12% of web developers who use frameworks deploy their code on demand, 8% have a lead time of less than an hour, and 51%take less than a day to restore service. For web developers who don’t use frameworks, 9% deploy their code on demand,5% have a lead time of less than an hour, and 43% take less than a day to restore service.

“Web developers using frameworks are more likely to deploy code on demand, have smaller lead times, and are quicker to restore service”

However, there are disadvantages to using frameworks. For example, it is unlikely that one framework will provide everything a web developer needs, just as it is unlikely that a web developer will use everything that a framework or a library has to offer. The proliferation of different frameworks with different standards and guidelines only further muddies these waters. In this case, it may be easier to stick to one or two frameworks and supplement their use with custom code rather than creating a bloated working environment. 

Indeed, that’s what our data shows–the share of web developers using three or more frameworks is gradually dropping. Now, the average number of frameworks used is approximately the same for developers of all experience levels, around 3.2. However, usage habits change depending on specific years of experience–and may give an indication of what’s in store for the future of web development. 

For example, those with less than five years of experience are more likely to use one framework (22%) than those with six years or more (17%). While age is not necessarily correlated with experience, we see a similar trend for those aged 24 and under(22% use one framework) compared to those 45 and above(17%). 

We can take a look at specific frameworks to see who is using what. React is by far the most popular client-side library, as it is used by 58% of web developers who use client-side web frameworks. React’s stable popularity as a library is contrasted by jQuery’s decline, which has experienced a 13 percentage point drop in usage in the past 12 months. Comparing the two, React is perhaps more capable of handling the modern web development environment–it’s faster, has a larger library of npm packages and is efficient at creating larger web applications.

Who are the developers using jQuery? 

Looking closely, we find that those with more than 11 years of web development experience are nine percentage points more likely to use jQuery than those with less than ten years (49% vs 40%). Similarly, these seasoned web developers are less likely to use React(52%) compared to their peers (58%). As jQuery was created nearly a decade before React, it makes sense that those with more web development experience are sticking to what they know. 

“Experienced developers are more likely to use jQuery and less likely to use React than their peers”

What about server-side frameworks?Next.js and Spring have been on the rise in the past 12 months.Next.js’ and their popularity is likely linked with React–after all, Next.js is a framework built upon React. Infact, 86% of those who use Next.js also use React; for comparison, only 45% use jQuery. As for Spring–a Java-based framework–itsincrease in usage may be explained by a similar increase in Java use amongst web developers–8 percentage points in the past 12 months (27% vs 19%). 

A frameworks user mindset

What does framework use mean for the technology use of web developers? If a web developer is forced to configure or write an application in a particular way, it may narrow their skillset as it forms a reliance on a particular architecture. When we look at the web developer population, it seems that those who use frameworks are actually more likely to be self-driven, have technical skills, or use web technologies when compared to those that don’t use frameworks. 

Framework users are more likely to have learnt how to code through self-education (66% vs 55%) and are more likely to manually download packages from npm(45% vs 36%). Similarly, they are more likely to use each of the top-ten web development technologies listed in our survey.

“Web developers who use frameworks are much more likely to have learnt to code through self-education”

Of these technologies, continuous integration/deployment (CI/CD)services are particularly worth mentioning–framework users are more than twice as likely to use these compared to non-framework users. As we’ve previously highlighted, framework users are more efficient when it comes to code deployment. However, framework users that also use CI/CD tools are 5 percentage points more likely to deploy on demand (15%) than framework users who don’t use CI/CD tools (10%).

Finally, while the share of web developers who use low-code or no-code tools has increased by 9 percentage points in the past six months (54%)–for framework users this share is 40%. This corresponds to an increase of only 5 percentage points in the same timeframe. In other words, those who are using frameworks are more likely to rely on old-fashioned coding by hand and have the skills to do so.

Access research reports that highlight key current and emerging development trends, expertly narrated by our analysts, based on the data from our global surveys by joining the community. Click here to join.

Categories
Tips

11 Tips And Tricks To Write Better Python Code

Here are 11 tips and tricks that will help you write better Python code and become a better programmer:

1. Iterate with enumerate instead or range(len(x))

In Python, we generally use a for loop to iterate over an iterable object. A for loop in Python uses collection based iteration i.e. Python assigns the next item from an iterable to the loop variable on every iteration. The usual usecase of a for loop is as follows:

values = ["a", "b", "c"]

for value in values:
  print(value)

# a
# b
# c

Now, if in addition to the value, you want to print the index as well, you can do it like this:

index = 0

for value in values:
  print(index, value)
  index += 1

# 0 a
# 1 b
# 2 c

or another common way to do this is by using range(len(x)):

for index in range(len(values)):
  value = values[index]
  print(index, value)

# 0 a
# 1 b
# 2 c

However, there is an easier and more pythonic way to iterate over iterable objects by using enumerate(). It is used in a for loop almost the same way as you use the usual way, but instead of putting the iterable object directly after in in the for loop, or putting using it as range(len(values)) , you put it inside the parentheses of enumerate() as shown below:

for count, value in enumerate(values):
  print(count, value)

# 0 a
# 1 b
# 2 c

We can also define a start argument for enumerate() as shown below :

for count, value in enumerate(values, start=1):
  print(count, value)

# 1 a
# 2 b
# 3 c

The enumerate() function gives back two variables:

  • the count of the current iteration
  • the value of the item at the current iteration

Just like the loop variables in a for loop, the loop variables can be named anything, for instance, we can call then index and value and they’ll still work. enumerate() is more efficient than a for loop as it saves you from the hassle to remember to access the value inside the loop and use it correctly and then also remember to advance the value of the loop variable, it is all handled automatically by Python.

2. Use list comprehension instead of raw for loops

List comprehension is an easier and elegant way to define an create lists based on the existing lists. They are just a single line of code consisting of brackets containing the expression that is repeatedly executed at each iteration. Hence, they are more time and space efficient than loops and transform iterative statements in a single line of code.

The usual syntax of a list comprehension looks like this:

newList = [ expression(element) for element in oldList if condition ] 

Here’s an example of list comprehension in code:

# Using list comprehension to iterate through loop
List = [character for character in 'HackerNoon']
 
# Displaying list
print(List)

# Output
# ['H', 'a', 'c', 'k', 'e', 'r', 'N', 'o', 'o', 'n']

3. Sort complex iterables with sorted()

The Python sorted() function sorts the elements of an iterable object in a specific order (ascending or descending) and returns them as a sorted list. It can be used to sort a sequence (string, tuple, list) or collection (set, dictionary, frozen set) or any other iterator.

The syntax of the sorted() function is as follows:

sorted(iterable, key=None, reverse=False)

sorted() function takes at max three parameters:

  • iterable: It could be any iterator
  • key: It is an optional argument that serves as a key for sort comparison.
  • reverse: It is also an optional argument that is used to specify a reversed sorted list as the output

4. Store unique values with Sets

A Python Set stores a single copy of the duplicate values into it. Hence, it can be used to check for unique values in a list. For example:

list_inp = [100, 75, 100, 20, 75, 12, 75, 25] 

set_res = set(list_inp) 
print("The unique elements of the input list using set():\n") 
list_res = (list(set_res))
 
for item in list_res: 
    print(item)

So the output of the above program would look like this:

The unique elements of the input list using set():

25
75
100
20
12

5. Save memory with Generators

The basic function of the generator is to evaluate the elements on demand. It is very similar to the syntax for list comprehension, where instead of square brackets, we use parentheses.

Let’s consider an example where we want to print the square of all the even numbers in a list:

myList = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
print("The given list is:", myList)
mygen = (element ** 2 for element in myList if element % 2 == 0)
print("Elements obtained from the generator are:")
for ele in mygen:
    print(ele)

The output of the above code would look like this:

The given list is: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
Elements obtained from the generator are:
4
16
36
64
100

Having said that their syntax is quite similar to list comprehension, you must be wondering how it is different from list or set comprehension. Unlike list or set comprehension, generator comprehension does not initialize any objects. As a result, you may utilize generator comprehension instead of list or set comprehension to lower the program’s memory requirements.

6. Define default values in Dictionaries with .get() and .setdefault()

.setdefault() method allows to set dict[key]=default if key is not already in dict.

The syntax of .setdefault() looks like following:

dict.setdefault(key, default=None)

Here’s an example code snippet to understand how to use .setdefault():

a_dictionary = {"a": 1, "b": 2, "d": 4}
a_dictionary.setdefault("c", 3)

print(a_dictionary)

The output of the above code would look like:

{'a': 1, 'b': 2, 'd': 4, 'c': 3}

The same thing can also be achieved by using .get() method by passing a default value for the key, as you can see below:

a_dictionary = {"a": 1, "b": 2, "d": 4}
print(a_dictionary.get("c", 3))

print(a_dictionary)

The output of the above code would look like following:

3
{'a': 1, 'b': 2, 'd': 4}

7. Count hashable objects with collections.Counter

The Collections module supports high-performance container datatypes (in addition to the built-in types list, dict, and tuple) and contains a variety of useful data structures for storing information in memory.

A counter is a container that keeps track of the number of times equal values are added.

It may be used to implement the same algorithms that other languages employ bag or multiset data structures to implement.

Import collections makes the stuff in collections available as:

import collections

Since we are only going to use the Counter, we can simply do this:

from collections import Counter

It can be used as follows:

import collections

c = collections.Counter('abcdaab')

for letter in 'abcde':
    print '%s : %d' % (letter, c[letter])

The output of the above code would look like this:

a : 3
b : 2
c : 1
d : 1
e : 0

8. Format strings with f-Strings (Python 3.6+)

f-strings, also called as “formatted string literals“, are a new and more pythonic way to format strings, supported by Python 3.6+. They are a faster, more readable, more concise, and a less error prone way of string formatting in Python.

As the name “f-string” says, they are string literals that have an f at the beginning and curly braces containing expressions that will be replaced with their values at the runtime and then formatted using the __format__ protocol.

f-strings can be used as following:

name = "Eric"
age = 74
print(f"Hello, {name}. You are {age}.")

# 'Hello, Eric. You are 74.'

9. Concatenate strings with .join()

In Python, we can use the .join() method to concatenate a list of strings into a single string. The usual syntax for this method looks like below:

'String to insert'.join([List of strings])

It can be used in multiple ways — if you use the empty string ““, [List of strings] is simply concatenated, and if you use a comma, a comma-delimited string is created. When the newline character \n is used, a newline is appended after each string. See the example below:

l = ['aaa', 'bbb', 'ccc']

s = ''.join(l)
print(s)
# aaabbbccc

s = ','.join(l)
print(s)
# aaa,bbb,ccc

s = '-'.join(l)
print(s)
# aaa-bbb-ccc

s = '\n'.join(l)
print(s)
# aaa
# bbb
# ccc

10. Merge dictionaries with {**d1, **d2} (Python 3.5+)

The easiest way to merge dictionaries is by using the unpacking operator (**). The syntax for this method looks like this:

{**dict1, **dict2, **dict3}

Here’s an example to understand this method better:

d1 = {'k1': 1, 'k2': 2}
d2 = {'k3': 3, 'k4': 4}

print({**d1, **d2})
# {'k1': 1, 'k2': 2, 'k3': 3, 'k4': 4}

11. Simplify if-statements with if x in list

Assume we have a list with the primary colours red, green, and blue. And somewhere in our code, we have a new variable with a colour, so c = red. Then we’ll see if this is one of our primary colours. Of course, we might check this against each item on our list as follows:

colors = ["red", "green", "blue"]

c = "red"

# cumbersome and error-prone
if c == "red" or c == "green" or c == "blue":
    print("is main color")

However, this may become quite time consuming, and we can easily make mistakes, such as if we have a typo here for red. It is more simpler and far preferable to just use the expression if x in list:

colors = ["red", "green", "blue"]

c = "red"

# better:
if c in colors:
    print("is main color")

Conclusion

Python is a widely used programming language and by using the above tips and tricks, you can become a better Python programmer.

I hope this article was helpful. Keep reading!

Categories
Community Tips

The importance of the development of AI in your professional career

There is no longer a stage in the creation of artificial intelligence when the technology is in the experimental phase with minimal proof of concept. Organisations all over the globe are struggling with how to incorporate it into their culture and locate the appropriate individuals to lead artificial intelligence and machine learning initiatives because they are aware that it is a force that must be reckoned with.

According to research, sixty percent of Indian businesses are under the impression that Artificial Intelligence (AI) would have a disruptive effect on their industry over the next two to three years. According to a survey, the number of available positions in the fields of analytics and data science has increased by thirty percent between April 2021 and April 2022.

The rapid advancement of artificial intelligence and automated systems is opening up prospects for companies, the economy, and society.

Automation and artificial intelligence have been around for some time, but current technological advancements are expanding the capabilities of machines to perform more and more. According to the findings of our study, society needs these advancements to create value for companies, contribute to economic development, and make progress on some of the most challenging social issues that we face.

The rise of AI and new jobs

Although the technologies of the Fourth Industrial Revolution, powered by AI, will continue to dramatically transform the world and the way we work and live, it is possible that AI may not result in a significant rise in employment. Instead, artificial intelligence will result in the creation of more employment than it eliminates via automation.

These newly generated positions will call for new skills, which in turn will entail considerable investments in upskilling and reskilling programs for both young people and adults. However, private companies and public administrations may – and are obligated to – collaborate to confront this transition and welcome the beneficial effects of AI on society.

According to the Global Artificial Intelligence Study conducted by the year 2030, AI would cause a software projected rise of $15.7 trillion, or 26 percent, in the total GDP of the world. The expansion of GDP will be driven by consumer spending to the tune of around sixty percent, with increased productivity accounting for approximately forty percent of the overall expansion.

Reskilling and Upskilling

For corporations and authorities to reap the advantages of AI in terms of productivity and profitability, they will need to work together on huge reskilling and upskilling initiatives. These projects will assist workers in retraining and preparing for new and upcoming employment opportunities.

Artificial intelligence can automate 3 percent of employment opportunities over the next few years. Increased digitalization brought about by COVID-19 may speed up this process. As artificial intelligence develops and becomes increasingly self-sufficient, thirty percent of all employment and forty-four percent of people with low levels of education will be in danger of being automated by the middle of the twenty-third century.

According to the World Economic Forum, during the next five years, almost half of all employees will need some kind of further training or retraining to be adequately prepared for changing and new employment opportunities. The fast speed of technological progress necessitates the development of new models for employee training to adequately prepare workers for a future dominated by AI.

The development of workers’ soft skills, which can’t be replicated by artificial intelligence, should be a priority for businesses. It seems probable that the importance of creative thinking, leadership and emotional intelligence will only continue to rise in our ever-changing world.

Since 2018, AI and IoT have managed to land in the top 3 on the list of Emerging Technology Top 10, and with valid reasons that showcase the strength of AI and IoT, alternatives are abundant SUCH helping businesses generate productivity improvements, end up saving time, and raise profits. In other words, AI and IoT are helping businesses create a better future.

Businesses seek managers who can embrace the power of artificial intelligence to make successful business choices that may reform ineffective business models and establish new ones that can have an oversized benefit as the competency of AI continues to rise. With proper training and appropriate programs applicants can make their career in AI may explore the concept of combining value creation and value appropriation in corporate CRM Development Company and changing current organizational procedures and offers.

Author Bio – Ethan Millar is a technical writer at Aegis Softtech especially for computer programming like Asp.net, Java, Big Data, Hadoop, dynamics AX, and CRM for more than 8 years. Also, have basic knowledge of Computer Programming.