How to Become a Great Software Developer — Best Advice from Top-Notch Engineers - https://www.youtube.com/watch?v=suATPK45sjk The chop must advise learn. Kotlin. That was predictable. Well, being a good developer. That's a very loaded question. It starts with the definition of good. Being a good programmer developer takes several qualities. First of all, that's attention to details. Programming is all about small, small videos, like things that you in casual communication or in text, when you omit a comma or flip a word, stuff like that, it doesn't really matter in your non development life. But in programming, like just one character in your code or off by one somewhere can be a difference between code that work incorrectly and code that doesn't work. So attention to the small details is really what makes professional developers different. And that's the quality that's needed to become good software developer. I enjoy working with extremely good and at the same time very junior developers who arguably know very little, right? But the way they approach the tasks at hand, the way they learn, so the way they are curious and hungry to do things and it's an amazing experience and I love them as contributors and they're great developers. They're just great junior developers. So first thing I'll say is that the greatness in this question to me doesn't equate with experience necessarily, especially years of experience. If I think about this, first thing that I'll say, and again, this is my personal opinion, this is not like a recipe, but first thing I'll say is a fundamentals. If you're using a data structure like a library list or a map or something, do you know how that's working? What kind of algorithms are implemented there? Why is it fast? Do you know how memory is managed in the runtime you're using? Do you know what kind of things are done under the hood to manage concurrency, for example, like synchronized threads and so on and so forth. Do you know how things work under the hood in general? And looking into that makes you a better engineer because you learn from other engineering decisions made by other people. It makes you, it exercises your mind in an analytical way that you really need working on your own code. And it also makes you just knowledgeable. It's much easier for you to figure things out and make connections where they're unobvious. I remember a question I was interviewed by a startup CTO some 12 years ago. He asked me a question that I then kept asking in my own interviews that I liked very much. Question is simple. So for web developers, imagine on the webpage there's a button, you click on it. Next page comes what happened between the button click and the next page? Think about it for a second. Right? That onion can have five layers or a thousand. You can spend five minutes answering the question, or you can spend an hour and not be done halfway through because of how many things happen or can happen then, depending on what level you decide to stop and speak about. And the more layers of that onion you can stop and talk about. Knowingly, the better you understand that system and the better web developer you'll be. Right? Things like network protocols, things like database architecture. With so much of software available today being open source, you can be kind of the hood of pretty much any technology that you use. And you should do that. And you should read books and watch presentations about how this type of software works. And I think that the main benefit that brings is that it can help you resolve problems much more confidently and much more quickly than just if you just poke at things and see, like, if I do this, does this work? No. Okay, let me try something else. Don't tie your identity to a specific technology or set of practices. So I see a lot of people saying that I'm a Kotlin developer, or I'm a Python developer, or I'm an Android developer, and people who say that kind of thing, that people who are not Android developers or not Kotlin developers are not like me. And probably sometimes I see them as kind of competitors or enemies or something like that. Or maybe I say that they are stupid and don't know what they are doing and instead they should be using the best language on the planet, which is Kotlin. I don't think this is healthy. I don't think this is good. I think that it's much better to just identify yourself as a developer and learn the tools. Learn what tools exist, learn tools, what tools can benefit you in which cases and use the best tool for the job and base your identity on something else and not on that. Believe me, during your career you will have to learn many different languages. And it is wonderful. Each language language is different. Each one can teach you something new and change how you approach programming overall. For example, I wrote very different code when I coded in Java. Then when I learned Objective C, it changed. When I first touched Swift, it's once again changed and each language placed its mark on me. So learn different programming languages, embrace them and stay open. Don't be afraid to learn something unnecessary. So, for example, speaking of Kotlin, a very common question of people who start to learn Kotlin is do I have to learn Java? And this, do I have to learn? I think it's not the best way to put things like Will learning Java make you a better Kotlin developer? Yes, definitely. Because you will be easier able to understand the APIs of different libraries that you probably will want to use. You'll better understand how this whole environment works, things like that. You will better understand why some things in Kotlin are the way they are and not something else. So don't be afraid to learn something that isn't necessary. As we advance our careers as engineers and it doesn't matter whether you're a consultant engineer or a product engineer, you will be working with people like more and more. Inevitably you'll be reading the requirements, their stories, their comments. You'll be writing the same thing. You'll be speaking, you'll be communicating, you'll be explaining, presenting. You'll work with people a lot, sometimes more than you work with code, especially if you measure your time minutes in the day and sort of best. Engineers are also just great at working with people in everything that that entails. Don't stick to one career. You're not doomed to be a software developer for your whole life. Take me as an example. I learned to be an information security specialist, then I became an Android developer, had to switch to iOS development, then I became a team lead, did some backend development, then I became a manager and then a product manager. And now I'm leading a development of a programmin language. And that's actually great because in each role you learn different skills that may help you in the main one if you decide to return it. For example, if you'll become a product manager, you will be much better in understanding what and why and for whom you are building. It will drastically help you to become a staff plus engineer because you will not just write code, you will think about business needs or for example, if you are becoming a team lead and then decide to stop doing it. It will teach you other essential skills like how to plan your time and time of other people, or how to make decisions in uncertainty or other things. So don't stick to one's career. Your life is long. You can try different things and find a one that suits you the best. When you're young, it feels like you can work 20 hours a day or 18 hours a day or something like that. And it's a lot of fun to write software. You may end up like with your day job and your hobby project, like working for eight hours on one thing and then another eight hours on the second thing. And this is kind of fun. I did a little bit of that when I was younger, but I think it's very important to not focus on that, not close your eyes to other things, other fun ways to spend the time, other ways to take care of your body, your emotional state, your mind, read things, go for a walk, do some physical activities. I think finding a healthy balance between all of these will allow you to sustain your productivity and sustain the joy that software development brings you for a much longer amount of time. Keep learning new things, go deeper, go wider. Look at how things are done nowadays. If there is a new big trend, look into it. Like nowadays, that's generative AI. Look into that. It will help you stay up to date. It will help you be a better engineer and also just aim higher. In general, a lot of people underestimate themselves and just don't try things they could have succeeded at. And you should do that. You should try, you should experiment with the things that you feel are out of your league. You should apply to jobs you think you're not good enough for, and you should prepare for those interviews and get the job you can. So that's like top piece of advice that I can give and learn. Kotlin.
How to Become a Great Software Developer — Best Advice from Top-Notch Engineers - https://www.youtube.com/watch?v=suATPK45sjk 초보자는 반드시 Kotlin을 배워야 합니다. 예상 가능한 일이었죠. 음, 좋은 개발자가 된다는 것은 매우 복잡한 질문입니다. '좋다'의 정의부터 시작해야 하죠. 좋은 프로그래머나 개발자가 되려면 여러 가지 자질이 필요합니다. 우선, 세부사항에 대한 주의력이 필요합니다. 프로그래밍은 모두 작은 세부사항에 관한 것입니다. 일상적인 대화나 텍스트에서는 쉼표를 빠뜨리거나 단어를 바꿔 말해도 별로 중요하지 않지만, 개발과 관련 없는 일상생활에서는 그다지 중요하지 않습니다. 하지만 프로그래밍에서는, 개발 외의 삶에서는 그렇게 중요하지 않습니다. 그러나 프로그래밍에서는, 코드의 한 글자나 어딘가에서 하나만 빗나가도 제대로 작동하는 코드와 작동하지 않는 코드의 차이를 만들 수 있습니다. 그래서 작은 세부사항에 대한 주의력이 전문 개발자를 다르게 만드는 요소입니다. 그리고 이는 좋은 소프트웨어 개발자가 되는 데 필요한 자질입니다. 저는 매우 훌륭하면서도 동시에 매우 주니어한 개발자들과 일하는 것을 즐깁니다. 그들은 아마 아는 게 별로 없겠죠, 맞죠? 하지만 그들이 접근하는 방식은당면한 과제와 그들의 학습 방식, 그들이 호기심 많고 열정적으로 일하는 방식은 놀라운 경험이며 그들을 기여자로서 사랑합니다 그들은 훌륭한 개발자입니다. 그저 훌륭한 주니어 개발자일 뿐입니다. 첫 번째로 말씀드릴 것은 이 질문의 위대함이 반드시 경험과 동일시되지 않는다는 점입니다, 특히 경력 연수와는 관계없습니다. 이에 대해 생각해보면, 첫 번째로 말씀드릴 것은, 다시 한 번, 이는 제 개인적인 의견이며 정답은 아닙니다만, 첫 번째로 말씀드릴 것은 기초입니다. 라이브러리 리스트나 맵 같은 데이터 구조를 사용할 때, 그것이 어떻게 작동하는지 아시나요? 어떤 종류의 알고리즘이 거기에 구현되어 있나요? 왜 빠른가요? 사용 중인 런타임에서 메모리가 어떻게 관리되는지 아시나요? 동시성을 관리하기 위해 어떤 작업들이 내부적으로 수행되는지, 예를 들어 동기화된 스레드 등에 대해 아시나요? 일반적으로 내부에서 어떻게 작동하는지 아시나요? 이를 살펴보면 더 나은 엔지니어가 될 수 있습니다. 다른 사람들이 내린 엔지니어링 결정으로부터 배우게 되기 때문입니다. 이는 당신의 마음을 분석적으로 단련시키며, 이는 당신의 코드 작업에 정말 필요합니다. 또한 당신을 단순히 지식이 풍부하게 만듭니다.당신이 연결고리를 찾고 이해하는 것이 훨씬 쉽습니다. 12년 전 한 스타트업 CTO와의 인터뷰를 기억합니다. 그가 했던 질문을 저도 이후 면접에서 자주 사용했습니다. 질문은 간단합니다. 웹 개발자라면, 웹페이지에 버튼이 있다고 상상해보세요. 그 버튼을 클릭하면 다음 페이지가 나옵니다. 그 사이에 무슨 일이 일어날까요? 잠시 생각해보세요. 이 양파는 5개 또는 1000개의 층을 가질 수 있습니다. 5분 동안 답변할 수도 있고, 1시간을 써도 절반도 끝내지 못할 수 있습니다. 많은 일들이 일어나기 때문입니다. 어느 수준에서 멈추고 설명할지에 따라 다릅니다. 그 양파의 더 많은 층을 설명할수록, 시스템을 더 잘 이해하고 더 나은 웹 개발자가 될 것입니다. 네트워크 프로토콜이나 데이터베이스 아키텍처 같은 것들이죠. 오늘날 많은 소프트웨어가 오픈소스이기 때문에, 사용하는 기술의 내부를 들여다볼 수 있습니다. 그렇게 해야 합니다. 관련 책을 읽고 발표를 보면서 이런 소프트웨어가 어떻게 작동하는지 알아야 합니다. 이렇게 하면 얻을 수 있는 주요 이점은 문제를 더 자신감 있고 빠르게 해결할 수 있다는 것입니다. 단순히 찔러보는 것보다 훨씬 효과적입니다.이렇게 하면 되나? 하고 시도해 보는 거죠. 안 되네요. 다른 방법을 시도해 봐야겠어요. 특정 기술이나 관행에 자신의 정체성을 묶지 마세요. 많은 사람들이 자신을 코틀린 개발자, 파이썬 개발자, 또는 안드로이드 개발자라고 말하는 걸 봅니다. 그리고 그렇게 말하는 사람들은 다른 개발자들을 자신과 다르다고 여기죠. 때로는 그들을 경쟁자나 적으로 보기도 합니다. 또는 그들이 바보라고 생각하기도 하죠. 그들이 하는 일을 모르고 대신 세상에서 가장 좋은 언어인 코틀린을 써야 한다고 말하기도 합니다. 이는 건강하지 않습니다. 좋지 않죠. 그보다는 자신을 개발자로 정의하고 도구를 배우는 게 훨씬 낫습니다. 어떤 도구들이 있는지, 어떤 경우에 도움이 되는지 배우고 작업에 가장 적합한 도구를 사용하세요. 그리고 자신의 정체성을 다른 것에 기반을 두세요. 경력 동안 많은 다양한 언어를 배워야 할 겁니다. 그리고 그건 멋진 일이죠. 각 언어는 다릅니다. 각각 새로운 것을 가르쳐주고 전반적인 프로그래밍 접근 방식을 바꿀 수 있습니다. 예를 들어, 제가 코딩할 때 매우 다른 코드를 작성했습니다.자바를 배웠을 때, 그리고 Objective C를 배웠을 때 변화가 있었습니다. Swift를 처음 접했을 때도 다시 한 번 변화가 있었고 각 언어는 저에게 흔적을 남겼습니다. 따라서 다양한 프로그래밍 언어를 배우고 받아들이며 열린 마음을 가지세요. 불필요한 것을 배우는 것을 두려워하지 마세요. 예를 들어, Kotlin에 대해 말하자면, Kotlin을 배우기 시작하는 사람들의 흔한 질문은 "Java를 꼭 배워야 하나요?"입니다. 그리고 이런 "꼭 배워야 하나요?"라는 표현은 좋은 접근이 아닙니다. "Java를 배우면 더 나은 Kotlin 개발자가 될 수 있을까요?"라고 물어보는 게 좋습니다. 네, 당연히 그렇습니다. 다양한 라이브러리의 API를 더 쉽게 이해할 수 있게 될 것이고, 아마 사용하고 싶어 할 것입니다. 전체 환경이 어떻게 작동하는지 더 잘 이해하게 될 것입니다. Kotlin의 일부 기능이 왜 그렇게 되어 있는지, 다른 방식이 아닌지 더 잘 이해하게 될 것입니다. 그러니 꼭 필요하지 않은 것을 배우는 것을 두려워하지 마세요. 엔지니어로서 경력을 쌓아감에 따라, 컨설턴트 엔지니어든 제품 엔지니어든 상관없이, 점점 더 많은 사람들과 일하게 될 것입니다. 필연적으로 요구사항, 스토리, 코멘트를 읽게 될 것이고, 같은 것을 작성하게 될 것입니다. 말하고, 소통하고, 설명하게 될 것입니다.발표하게 될 겁니다. 사람들과 많이 일하게 될 거예요. 때로는 코드보다 사람들과 더 많이 일할 수도 있죠, 특히 하루 중 시간을 분 단위로 측정한다면 말이에요. 우수한 엔지니어들은 또한 사람들과 일하는 데 모든 면에서 뛰어납니다. 한 가지 경력에만 매달리지 마세요. 평생 소프트웨어 개발자로만 일할 운명은 아닙니다. 저를 예로 들어볼게요. 저는 정보 보안 전문가가 되었다가, 안드로이드 개발자가 되었고, iOS 개발로 전환했어요. 그 다음 팀 리더가 되었고, 백엔드 개발도 했죠. 그 후 매니저가 되었다가 제품 관리자가 되었어요. 지금은 프로그래밍 언어 개발을 이끌고 있습니다. 이게 실제로 아주 좋은 거예요. 각 역할에서 다른 기술을 배우게 되고, 그 기술들이 주요 분야로 돌아갈 때 도움이 될 수 있거든요. 예를 들어, 제품 관리자가 되면 무엇을, 왜, 누구를 위해 만드는지 더 잘 이해하게 됩니다. 이는 스태프 플러스 엔지니어가 되는 데 크게 도움이 돼요. 단순히 코드를 작성하는 것이 아니라 비즈니스 요구 사항에 대해 생각하게 되니까요. 또는 팀 리더가 되었다가 그만두기로 결정한다면, 다른 필수적인 기술들을 배우게 될 거예요. 이는 당신에게 다른 중요한 기술들을 가르쳐 줄 겁니다.시간 관리나 다른 사람의 시간을 계획하는 방법, 또는 불확실한 상황에서 결정을 내리는 방법 같은 기술들이 있죠. 한 가지 경력에만 매달리지 마세요. 인생은 길어요. 여러 가지를 시도해보고 자신에게 가장 잘 맞는 것을 찾으세요. 젊을 때는 하루에 20시간이나 18시간 정도 일할 수 있다고 느껴요. 그리고 소프트웨어를 작성하는 것은 정말 재미있죠. 결국 여러분은 본업과 취미 프로젝트로, 한 가지 일에 8시간을 쓰고 다른 일에 또 8시간을 쓰게 될 수 있어요. 이것도 재미있죠. 저도 젊었을 때 조금 그랬어요. 하지만 그것에만 집중하지 말고, 다른 것들에 눈을 감지 않는 것이 중요해요. 시간을 보내는 다른 재미있는 방법들, 몸과 감정 상태, 마음을 돌보는 다른 방법들, 책을 읽고, 산책을 하고, 운동을 하는 것도 좋아요. 이 모든 것들 사이에서 건강한 균형을 찾는 것이 여러분의 생산성을 유지하고 소프트웨어 개발이 주는 기쁨을 오랫동안 지속할 수 있게 해줄 거예요. 계속 새로운 것을 배우고, 더 깊이, 더 넓게 나아가세요.요즘 일이 어떻게 처리되는지 보세요. 새로운 큰 트렌드가 있다면 그것을 살펴보세요. 요즘은 생성형 AI가 그렇죠. 그것을 살펴보세요. 최신 동향을 파악하는 데 도움이 될 겁니다. 더 나은 엔지니어가 되는 데도 도움이 되고, 더 높은 목표를 세우는 데도 도움이 됩니다. 일반적으로 많은 사람들이 자신을 과소평가하고 성공할 수 있었던 일들을 시도조차 하지 않습니다. 그러나 당신은 그렇게 해야 합니다. 시도해야 하고, 자신의 능력 밖이라고 느끼는 일들을 실험해봐야 합니다. 자신이 충분히 좋지 않다고 생각하는 직업에도 지원해야 합니다. 그리고 그 면접을 준비하고 할 수 있는 직업을 얻어야 합니다. 그것이 제가 줄 수 있는 최고의 조언이며 배우세요.