Categories
Tips

Why Learning to Code Is the Ultimate Skill for Future-Proofing Your Career

As technology continues to shape the world we live in, it’s becoming increasingly clear that learning to code is one of the ultimate skills for future-proofing your career. With the demand for technology skills rapidly growing across all industries, the ability to code is no longer just a valuable asset but an essential one. 

Coding is a great skill on its own, but it can even enhance your existing skills such as writing or marketing. In this article, we’ll explore why learning to code is so important and how it can help you future-proof your career with practical advice that will further your learning.

Why You Should Learn Coding

Firstly, let’s consider the job market. According to the Bureau of Labor Statistics, computer and information technology jobs are projected to grow by 11% between 2019 and 2029, much faster than the average for all other occupations. 

This growth is expected to create tens of thousands of new jobs in the field, making it one of the fastest-growing industries in the world. By learning to code, you position yourself to take advantage of this growth, opening up a world of exciting career opportunities in technology.

Tech Takeover

Moreover, technology is rapidly transforming the way we work across all industries, from healthcare to finance to retail. As businesses become more reliant on technology to stay competitive, the demand for tech-savvy professionals who can develop, implement and maintain technology solutions is skyrocketing. 

By learning to code, you develop a growth mindset that allows you to stay current with the latest trends and technologies. This not only helps you stay relevant in the job market but also allows you to continually improve your coding skills and take on new challenges throughout your career.

Professional Growth

In addition to the job market benefits, learning to code can also enhance your problem-solving skills, creativity, and critical thinking abilities. Coding requires you to think logically, break down complex problems into manageable parts, and find creative solutions to technical challenges. 

These skills are transferable to many other areas of life and can be applied to problem-solving outside of coding. For example, problem-solving skills in coding are easily applicable to the logistical aspects of sales work. Finding the fastest and most cost-effective way to tackle a problem is something that coding instills in its pupils.

Fulfilling Career Path

Furthermore, coding is a skill that can be used to build and create, making it an incredibly fulfilling pursuit. The ability to build and bring ideas to life through coding is a powerful tool, allowing you to create software, websites, and apps that can further your financial future. By learning to code, you gain the ability to create things that matter and make a difference in people’s lives.

Not to mention, coders aren’t going to be hurting for opportunities for a long while. Even with the rise of AI,  there’s always going to be value in a human developer who is willing to work with a team. 

Your career path can help you build wealth, it can help you in the future in case you need to work on your credit score and take out a loan as employment history is one of the things lenders will review.

The Basics Of Learning How To Code

So, how can you start learning to code? There are many resources available online, including coding boot camps, online courses, and coding communities where you can connect with other developers and learn from their experiences. 

Pick And Stick To One Programming Language

There are many programming languages to choose from, such as Python, JavaScript, and Ruby on Rails that could be the foundations of your first project.

There are too many languages out there to list down, but what’s more important than your first language is sticking to that language for at least a year.

 Programming at its core involves using instructions to tell a computer what to do. You can’t learn the basics if you keep changing languages while learning. Most computer languages aren’t all that different, so it’s best to stick with a language you find relevant to your goals.

Practice Consistently

Practice, as always, makes perfect, and the same goes for programming. Start with simpler projects and gradually work your way to more meaty projects. There are many online resources available to help you learn to code, such as Codecademy, FreeCodeCamp, and Udemy.

As far as scheduling goes, make sure to set aside a set amount of hours each week where you’re learning new things. Coding doesn’t have to be rushed, but you do need to be learning something every week. Stagnancy is the enemy of progress, and to avoid that, make sure you always have time to practice coding.

Connect With The Community

Programming is often a collaborative effort, and working with others can help you learn faster and get feedback on your code. Join online communities, attend meetups, and contribute to open-source projects to expand your knowledge.

The community is also a great avenue to vent your frustrations and worries. All these developers have had their own wellness issues. They can help you work your way through the tougher parts of coding in ways that are relatable to you. 

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

Coding Schools: Training for a New Life

The increase of refugee arrivals in Europe and the US created a significant challenge in the social and economical environment. At the same time, the need for employees in the tech world is constantly growing. One of the most promising ideas emerging from this situation were Coding Schools for refugees. Coding schools were created in order to connect the dots between talented people with a refugee background without tech experience and employment opportunities in the tech world. They are designed to offer not only training on hard skills but soft skill orientation, psychological support and interview preparation. Adding to this, more and more tech companies are looking to recruit refugees in order to increase diversity in the workspace and drive innovation. 

As Nataša Koprtla, Co-Founder of Borders:none and Vincent van Grondelle, Program Manager of Migracode Barcelona, shared with us, the goal is to build a community that not only educates refugees but also supports them through labour integration and helps learners resolve any additional issues they might be dealing with. Let’s find out more about these coding schools.

Would you like to tell us a little bit about your organization and vision?

Nataša: We, in Borders:none believe in integration through connecting with like-minded individuals and learning new skills. Friendship and knowledge are the biggest gifts you can give to someone who was forced to flee their own home. And we strongly believe there are no boundaries in human potential. That is why we help refugees, asylum seekers and other people who were forced to migrate. Our organisation gives them a possibility to make their life better through our programs. We mostly work with young refugees aged 18-30 years old and tailor our projects according to their inputs and needs.

We accept everybody with an interest in this kind of stuff. Our courses begin with workshops about websites, what they are, what they consist of. We analyse them together, we draw wireframes together and interactively we learn about the elements of websites. During the first two weeks of the program we don’t use computers at all. After that, we start with CSS and HTML. We use non-formal methods of learning. They are proven to have the best impact when it comes to adult learners, so mostly we do “learning by doing”. 

Vincent: Migracode Barcelona is a coding school for people with a migration background. People who are in a vulnerable or difficult position. They might not have the educational background or the economic resources to find a job and sustain their life in Spain or Europe. Migracode’s main goal is to support refugees and migrants to get free tech education and to connect them to the tech market. With this labour integration process, we hope to actually improve their living situations. At the same time, we really aim to build a community, a migrants tech community. We bring local people together with our students to promote social inclusion. In Migracode, we create a diverse and inclusive community of people with an interest in coding. Last but not least, we provide first-line Social Work support, if needed. For instance, we may forward our beneficiaries to specialised organisations for trauma counselling.

Who are your teachers? How many developers are volunteering in your courses? 

Nataša: Our teachers are mostly freelancers or they work in small companies or cooperatives. They are developers with many years of experience in HTML, CSS, JavaScript, Java and Ruby on rails. For now, we mostly stick to HTML and CSS because we believe they are the basis for everything. Most of our teachers are with us from the beginning. They have invested a lot of time and energy in this project. There are currently nine developers participating in our courses. We also have class assistants who help people follow the class and facilitate classes. We use modern technologies, similar to most IT companies (like Slack). They help us stay in touch with our students, to support their tasks and homework writing and to actively discuss topics related to what they learn. 

Vincent: We have more than eighty people in our pool of volunteers who are supporting in teaching. All the teachers are volunteers. Any additional support like LinkedIn support, cv support, legal-related support, career coaching support and so on comes from our volunteers. We also have some volunteers from companies offering soft skills training. There are a lot of people who apply to support our program. Of course, not all of them are constantly involved.

On a weekly basis, we have at least four people actively involved. Fortunately, the network constantly evolves. They join our slack channel and then they can choose how they will offer their service. They can, for example, support in 1-2-1 sessions, support with checking the homework or they can even choose to join a class and support in teaching. There are the main instructors, they teach a full module which lasts around three weeks. We also have some other instructors who are more independent and choose how to support. It surely is a lot to manage since we have limited human resources but using Slack has proven to be the best way to keep them engaged.

You both mentioned several courses and different kinds of training. What courses do you offer and what kind of skills a developer will have gained in the end?

Nataša: We offer basic HTML and CSS classes and advanced HTML and CSS (with a little bit of JavaScript). We had one basic Java course and we had a few workshops on different IT topics. We held courses twice a week for an hour and a half and in the meantime, we use Slack channel for discussion with our students and for supporting them in their homework and tasks. Our approach to learning is non-formal and we mostly do “learning by doing” especially in our advanced classes. We use codepen.io where we work together on various projects and thus learning how to create the different chunks of a website.

We also take our students to events held in local society – all kinds of meetups which could be interesting to them. Due to the specific situation, our groups usually don’t progress to higher levels of education. Croatia is a transit country and we don’t have many refugees and asylum seekers here. People leave the country or find employment in some other profession. They need to work in order to pay for living costs) and prolong their learning process for a few years. 

Vincent: We teach the basics of full-stack until they reach a junior level. We offer courses of five very profound coding front and backend languages such as HTML, CSS, Javascript, React Node JS and database. Basically, we provide them with the main skills and knowledge. When the time comes to join a company they can get a very specific training of the language the company prefers. You can’t prepare someone to know all coding languages perfectly and start right away with every company. So they get basic knowledge and during their first job experience, they can dive deeper into specific languages.

What about funding? Do you receive any support?

Nataša: We don’t get funding. Everything we do is completely on a voluntary basis. One company and some people donated laptops. while venues provide free rooms to organize our classes. That is also one of the reasons we only do one course at a time with a maximum of 10 students. 

Vincent: Being an NGO with limited resources can be challenging. We’ve received great support from the private sector but still, it is a challenge to manage such a project. On the one hand, we’ve been very lucky, we’ve engaged some great partners who have been supporting us very generously. But there still is this constant process we are in. We are searching for sustainable funding in order to include more people and make the management of the program more stable.

What is the biggest challenge you have faced so far as coding schools?

Nataša: The biggest challenge is to keep our students motivated all the time, not to drop-out. We are dealing with a specific population with a very high risk of dropping out. Marginalised groups are in general prone to drop out. Refugees and asylum seekers with whom we work have their own specifics and obstacles that prevent them from completing courses. That is why we invest a lot of energy not only in teaching but to develop methods to decrease these rates. Other challenges are more related to financing issues – not having our own space and other logistics. But thankfully, due to some donations, we managed to ensure a venue for this year’s courses.

Vincent: There is a big challenge in keeping the students engaged and to not allow external factors of their lives prevent them from finishing or even joining our course. Making sure that students are getting adequate support from us to continue the course has been challenging. Until now we’ve managed to prevent that by providing them with social support.
On a more organisational level, we have limited staff resources and we are managing a code school with thirty-three students and eighty volunteers involved. Of course, having the volunteers around makes this whole project possible but it is a huge challenge to manage. Also, the COVID-19 situation actually caused one of the difficulties we are dealing with. We switched completely to online courses and it is actually going quite well but we miss this important part where we actually meet the students and talk to them face to face.

And what are the next steps for your organization? Do you have any new course coming up?

Nataša: At the moment we’re in the process of writing an application for funding to our municipality. Hopefully, this will be completed within the year. In the future, we hope to be able to provide more courses and to include more weekly hours in our curriculum. This is very much dependable on financial support. We usually have two courses during the year – autumn and spring – and they last three months each. If we manage to get the funding we’ll certainly organize more courses. Courses including basic digital skills for students who need that first step before entering programming classes. 

Vincent: For now, we are aiming to have two groups of students simultaneously each time we start a new course. Right now we have three groups. One started in October as a pilot program with nine students. Two groups of twelve students each, started in March. Currently, we are also planning two new courses to start in June or July, depending on the development of the COVID-19 crisis. Also, we are currently working on a job fair. Given the situation, we switched to an online event and most of the companies we are connected to are interested in hiring. 

Could you share with us an inspiring story from your students?

Nataša: We had a lot of students by now and each story is specific. But I’ll mention just a few of them. We had a student from Egypt who made a total career switch. He started to learn coding with us, then we managed to find a traineeship for him. Α year and a half from when he started learning he found a job in one of the biggest Croatian companies all by himself. He is still learning and thriving to get to a higher level.

Another inspiring story comes from a  very young man from Syria who started learning with us but due to job obligations he couldn’t attend. Ηe continued all by himself and managed to master the materials. We are still supporting him until he can get an internship in an IT company. 

I’ll just mention two more older men who are great examples of highly motivated students. Both of them didn’t have any background in this field and their digital skills were on the lower level. One of them was from Ukraine and didn’t understand English. He studied a lot at home, in Russian. Both managed to finish the basic course and are highly motivated to continue. 

Vincent: Most of our students are facing various difficulties in their everyday life. Some of them are sharing a very small apartment with five people or single parenting their children. It’s amazing how at the end of the day they still manage to keep up and successfully continue with our program, with graduation in prospect. Also, after the coronavirus outbreak, it has turned out to be quite a challenge for us and for our students to move all of our classes online. We also moved our job fair to an online event. During this event, six companies participated and had sessions with our students. After this event at least three from nine graduate students got job interviews. They are currently in the process of interviewing. I think it shows a lot about our student’s possibilities, effort and ambition. 

Last but not least, how can someone contribute to these coding schools?

Nataša: There are several ways of how people or companies can get involved. We are always looking for new developers who would like to volunteer. At the moment we are running online classes so volunteers don’t need to be based in Zagreb. Developers can help in other ways as well – homework help, supporting individuals who need more support regardless of school classes. We are in a need for the equipment –mostly laptops but also additional gear. And of course, we need financial donations to keep us running the school. We want to provide more different courses and a larger number of classes for our students. In the end, companies can support our students by giving them opportunities for traineeship or internship.

Vincent: We are currently finding out that online teaching actually works. So for people who aren’t currently in Barcelona can contribute by having one-two-ones sessions with our students. They can also help with checking homework admissions and leaving feedback. On another level, companies can help with financing, material donations, space and soft skills training.

Short bio:

Nataša Koprtla is working with the Borders:None organization. She is a project manager with more than 10 years of experience in digital agencies, creative advertising agencies, IT companies. A psychologist and youth worker in the field of refugee youth and young asylum seekers. She has 4 years of experience working directly with young refugees and carrying out the projects related to this group.

Connect with Borders:none on Facebook

Vincent van Grondelle is the Program Manager of Migracode Barcelona. With a background in Social Work, Data Analysis and Non-Profit Management, he is now responsible for reporting, financing, managing volunteers, supporting students and for creating non-profit and corporate business relationships.

Connect Migracode on LinkedIn, Facebook, Twitter, Instagram

Looking to find out more about how other NGO’s are contributing to the tech environment? Visit our interview with Naomi Molefe, SA Chairperson in Women in Big Data, or our discussion with James Sugrue, co-Founder of donate:code and Aggelina Mila, coordinating Business Development at Social Hackers Academy.


Categories
Tips

10 Tips to help you build strong coding skills

Best practices for learning how to code

So, you’ve finished your first introductory coding course, but you don’t know what to do next. We’ve created this article to give you tips on what you should do, and what you shouldn’t do when you’re taking your first steps as a developer and trying to build strong coding skills.
Although this was originally designed for applicants preparing for the Code Chrysalis Immersive technical interview, it has useful information for anyone looking to take their next steps as a new developer!
Let’s get right into it. Here’s some advice to help you take your skills to the next level.

Tip 1: Be careful about coding challenge websites

Ignore the top scorers…for now. Oftentimes, the code solutions that get the top scores on websites like CodeWars and Coderbyte are not examples of good code. This is because the websites are games, and part of the game for developers is to see how short they can get their solutions.
While these solutions work, they are not necessarily what would be recommended in a professional setting. Why? That leads us to our next piece of advice.

Tip 2: Write code for people

We write code for people, and it is run by computers. Not the other way around. Short code does not always mean clear code.
If you take the code from coding challenge sites, you run the risk of interacting without fully understanding the code in question. If you’re new to coding, these often involve techniques or concepts that are a few levels above what you should be focusing on.
Comprehension is key.

Tip 3: Passing tests are useless if you do not know why

It can be easy to throw a bunch of ideas against a wall and see what sticks. But it would be even better if you knew why it sticks. For beginners and experienced devs alike, it is key to also understand the why’s.
If you do not understand “why” for basic topics, how will you understand “why” for advanced topics?

Tip 4: Be careful of copy-pasting code from StackOverflow or blogs

Make sure you know why something works (or does not work). Invest the time to understand the fundamentals. Another problem with StackOverflow – or blogs – is that they can be wrong, whether intentional or not. They can also be outdated.

Stay vigilant about the material or answers you are looking at.

Tip 5: Familiarize yourself with reading documentation

Reading documentation (on-line manuals) is an important skill. Frankly, it is a skill that many working developers lack, so building up this skill early will set you apart.
You can find JavaScript documentation on the Mozilla Developer Network. It can be intimidating to read and you will not be able to understand everything you read for quite a while. But that’s ok.

If you can learn just one new thing every time you try to read the documentation, you are making solid progress.

Tip 6: Learn to do things without native methods first

If you are using .forEach and .map for everything, I suggest you try solving problems without using any of those.
We want to be able to understand how these built-in methods work before using them. If you do not know how to do things without them, you will always be coding half-blind.

Make sure you have 20/20 vision. Your career will thank you for it.

Tip 7: Check your assumptions by running and checking your code often

Do not be afraid to use console.log to print things out.
Always double check.
Be aware of what data you have access to at any given point in your code.

Make sure that you test your assumptions — are you sure that variable is a function? A string? A number?

Sometimes, what you think is a 2 is instead a ‘2’ and that can make a big difference in code. Use  console.log and also typeof to double-check that what you think is true.

This will also protect you from bugs. It can be frustrating to write a bunch of code, only to run it at the end and realize that there is something wrong. Protect yourself from making these mistakes before you reach the end.

Tip 8: Error messages are your friends

When you see an error message appear, this is actually something to welcome.

Familiarize yourself with common error messages and what they mean — do not ignore them. Learn to read them so you can use them to your advantage.

Error messages will also give you a line number in your code where the error originated from. If it isn’t immediately clear what the error message means, Google it!

As you get more advanced, you will come across silent errors. The evil twin of error messages. These are situations where something is not working, but you do not have a handy error message telling you where it is going wrong. They are the worst.

So, next time you see an error message pop up, give them a big hug and thank you. And then listen to them.

We’ve listed some common error messages for beginner coders below:

Uncaught ReferenceError: ______is not defined>

This usually happens because a variable or function name is missing; the JavaScript engine is not sure what you are referring to.

Are you sure you spelled everything correctly? Are all of your variables declared? Did you copy/paste code? (Please don’t copy-paste code without understanding it)

Uncaught SyntaxError: Function statements require a function name
Uncaught SyntaxError: Unexpected identifier.

Did you forget a closing or opening bracket or parenthesis? That is usually the case.

Uncaught TypeError: Cannot read property>

This often happens when you are trying to read a property or call a method on an undefined object. Are you using a method that does not exist on an object? Is your object defined?

For more information, check out this helpful article.

Tip 9: Go slow and review often

It feels a little counter-intuitive, right?

Review concepts that you think you are already familiar with often. You will probably always come across something new. Try seeing if you can understand more MDN documentation each time.

You are learning the fundamental building blocks that will support your career. Spend time making sure this foundation is as strong as possible. Do not be ashamed of going back to review strings and numbers, even if you think you already know how to use them. There is always more to learn before you build strong coding skills.

So while React can seem really attractive, if you do not have a good grasp of the basics, it will be a struggle and waste of effort.

Tip 10: Make it work, then make it pretty

Do not stress about making your code look elegant. First, get it working. Then, we can go back and clean it up.

Working and ugly is better than broken and…still broken!

About the author:

Yan-Headshot

===

Yan Fan is Code Chrysalis’ CTO and Co-Founder. Born in China and raised in Seattle, she graduated from Dartmouth College with degrees in Economics and Arabic. After graduation, Yan worked at Bunge Global Agribusiness, a commodities trading house. After a career change into tech, Yan worked as a software engineer at Ayasdi, a leading Silicon Valley machine learning startup, and as an instructor for Hack Reactor’s prep course.

Code Chrysalis is Yan’s second coding bootcamp–with Hack Reactor, she co-founded and served as CTO of a coding school in Jordan helping refugees in 2016.