Hey, what's up?
John Sonmez here from simpleprogrammer.com.
I've got my book here, The Complete Software Developer's Career Guide, and I've had it
on my board for a while to do a video about some of the chapters in this book, some of
the concepts and to kind of expand on some of these.
You can find obviously all of the information in the book.
I've got an audio version that will be coming out.
Probably, by the time you're watching this video, it might be out already.
I thought I'd talk about today the technical skills you need to have as a software developer.
What are the technical skills that you need to have.
This actually comes from Chapter Three of the Complete Software Developer's Career Guide,
which was—it debuted at number five on the Wall Street Journal bestseller list.
Yes, it did.
Amazing.
I love to give myself compliments.
I love to like pat myself on the back.
"Yeah.
All right, John.
Good job, man.
All right."
What do we got here?
Technical skills you need to have as a software developer.
Let me talk about this a little bit.
This is one of those question I get a lot.
This is why I put it very early in the book, is that—especially, a lot of new developers
want to know what are the skills that they need to have in order to succeed as a software
developer and a lot of times they're focused on, "Should I learn Angular or React?", which
is really the wrong focus.
The more important focus is on—again, I always focus on principles, on higher level
concepts, on evergreen things that are going to benefit you for the length of your career
and that's what I'm going to talk about today.
The thing is—and I'll say this also—is that there's a lot more benefit in developing
principles and soft skills.
There was this Henry or Ralph Waldo Emerson quote that I keep on butchering, but it's
something like there's a million methods that you can utilize, but very few principles.
Anyone who knows principles can derive all the methods that they want, but someone who
just focus methods is in for trouble.
I don't remember the exact quote, but it's something like that and that's what I try
to convey.
That's why this channel is about soft skills.
That's why I wrote the book Soft Skills for Software Developers, my first book.
Look.
It just happened to me right there on the screen.
How cool is that?
Anyway—but you do need to have some technical skills as well, otherwise—I mean you don't
want to be—again, I'll point to my thing here.
This is a thing.
It's basically like talk and work.
Charlatan, Martyr, Hustler.
Okay?
You don't want to be a Charlatan which is all talk and then work.
You don't want to be a Martyr, which is all work and no talk.
You don't want to be a Hustler, which is maxed in the—fully in both, in both of those
things.
If you're going to be successful in whatever you're doing, you've got to have the skills
to pay the bills, but you also got to have the people skills and the soft skills that
are going to make you successful as well.
Right?
You got to have both of these things.
Without further ado, let's talk about some of the technical skills you need to have as
a software developer.
The first one is one programming language.
This is where it should start.
It's just one.
Just one programming language.
You don't have to know 15 different programming languages.
You need to have one that you specialize in that—I've got a whole playlist on specialization.
I'm not going to read the hashtag here, but you should definitely check this out.
Bookmark that playlist and watch those videos.
It's going to be one of the best things that you do for your career.
I promise you.
Go ahead right now.
Open up another window.
Hit bookmark or whatever you can find the link in the card or the description below,
but you're going to want to go through that and learn about specialization.
It's really important to learn one programming language.
So many beginners, so many people starting out they try and like—they're like, "I'm
going to learn Python and Java and JavaScript, and all this stuff."
What ends up happening is they get a weak understanding of each one of those languages
and it doesn't benefit them much.
Today in the software development world, you can pretty much learn one language and do
everything with it.
Languages have become really, really capable to do just about any task.
I know there's better tools for different jobs, but I'm just saying like pick a language
and stick with it.
I've got a video on the top languages for 2018, which you should check out if you're
curious which ones I would recommend.
Pick something.
It doesn't actually even matter which one that you pick, so long as you pick some programming
language to specialize and to focus on, so that you're focused so you're not all over
the place.
The next one is how to structure code.
This one is kind of interesting.
What do I mean by structuring code?
There's two good books on this that I'm going to recommend.
I'm trying to see if I have it on here.
Yeah, I did.
Actually, yeah.
I'll recommend both of them.
Code Complete by Steve McConnell, that's the first one.
That's a really, really good book about structuring your code, and the other one by one of my
favorite authors.
Actually, I just had an interview with him on this channel.
You can search on the channel for Uncle Bob Martin Clean Code.
Both of these books talk about structuring code and it's about—this is the thing that
I primarily use to judge whether a software developer is good, when I interview a software
developer, is I look at their code and I look at how it's written and I see how expressive
it is.
How are their variables named?
How are their functions named?
How do they structure the code?
How do they logically lay it out?
It should read like a nice book.
It should read like sentences.
If they've got comments all throughout their code, comments are a failure to express yourself
within the code.
I want to see you express yourself in the code.
It's an art form.
It's a skill to learn, but it's beautiful.
When you look at some beautiful code, it is beautiful.
It has beauty to it because you can understand it because you can read it because the variables
are named so well that it just reads and flows like you don't even have to know the programming
language to understand what the code is doing because the code itself speaks to you.
That's the best way I can describe it.
Again, I'm not going to be able to cover the completeness of what that is in this short
video, but that's why I gave you those two books, Code Complete and Clean Code.
Again, all the links will be in the description below.
You can always click the card, but I'd recommend that you check out those books.
You want to learn how to write good, clean code.
That's how I know that you're a professional.
As a beginner, to write good clean code is so important and then there's an art form,
like I said, to learn how to structure the code.
The next one.
This one is marginal, but it's object-oriented design.
Most programming languages today are going to have some object-oriented concepts.
You should know things like encapsulation, polymorphism.
It's right object-oriented design.
How to build a good object-oriented system and how to create classes, and all of those
things.
Again, it's not necessarily going to apply for using functional languages, but most developers
aren't.
Most developers are doing some kind of object-oriented programming, and so it's really, really important.
Regardless of whether or not you are using a functional language or object-oriented language,
in an interview, you're going to be asked object-oriented programming language questions.
It's almost given they're going to be asking those things.
It's all about managing complexity.
The whole point is that we've got to be able to take complex systems and be able to break
them down into smaller abstractions, so that we can—that's the whole point of software
development, like a good software development like a good software developer takes complex
things and makes them simple.
That's why I called this channel.
That's why I called—what I'm doing my company is Simple Programmer because the whole idea
was to make the complex simple.
That's the biggest attribute of a good programmer.
Object-oriented design like learning good object-oriented design is all about that.
Next, we've got algorithms and data structures.
You don't have to know all of this stuff, but you should know exactly at least what
an array is, linked list, stack, queue, tree, hashes, sets.
You should know about those data structures and how to use them.
These are things that you learn in the computer science college course.
I've actually got a really good recommendation for this.
I have a resource—a friend of mine, it's called Interview Cake.
If you don't know algorithms and data structures, if you're having problems doing the programming,
related algorithm problems, the kind of interview stuff that you'd see at Microsoft or Google,
solving these problems, rearranging strings, all this stuff and using data structures,
go to Interview Cake.
Again, in the description.
Their link will be in the description.
That's what you want to do because that is the best resource, by far, for this.
I used to recommend Cracking the Coding Interview.
I still do.
It's a good book, but this is better.
Interview Cake is what it's called and use the link that I sent you because that link
is my affiliate link, and I like it when you do that.
I like it because not only does it make money for Simple Programmer, which is good because
then I can make more videos and do more stuff, but it also lets me know like how many of
you are benefiting from it because I get a report on saying how many people actually
clicked the link.
I want to know like are you finding the stuff valuable that I'm promoting because I find
it extremely, extremely valuable.
I'm transparent.
I'm honest.
I'm telling you what—you know, you got a question?
I'll fucking answer it.
I'll tell you what I'm talking about.
I make some money with links, of course.
Of course, it's a business.
What was I going to say here?
So yeah.
Algorithms, data structures.
Really, really important.
Most software developers are ill equipped in this area.
If you're a computer science graduate, if you got your degree, you've probably gone
through some of the stuff, but it still doesn't hurt to really make sure that you have an
in-depth knowledge of this.
Not just for passing interviews, but what you'll find is that in coding life, in writing
code that you won't even realize that this knowledge will make you so much better of
a developer because once you know algorithms and data structures, you'll suddenly all these
places to apply it that you didn't see before.
You didn't know that you're missing the skeleton key that could unlock this door.
Next one I have here is development platform and related technologies.
What do I mean by this?
Is that you need to pick some kind of operating system or development platform that you can
develop for.
It's good to pick a programming language, but let's say that you pick—I don't know—well,
I mean most of them are kind of tied.
Most programming languages are tied to some platform, but you got to pick something.
I was going to say like let's say you picked Swift.
If you pick Swift, it's iOS, probably, but you could learn Objective C and be a Mac OS
developer or you could learn C# and you could develop for Xamarin, for .NET or I mean for
iPhone and Android, or you can learn C# and develop for .NET on Max, if you want now,
you can.
Pick a platform.
Pick an operating system.
Maybe it's Linux.
Maybe it's Mac OS.
Maybe it is—is that what they're calling it now?
Are they calling it Mac OS?
I think they are.
Maybe it's Windows.
Maybe it's iPhone.
Maybe it's Android.
It doesn't necessarily have to be an operating system, but it's some kind of development
platform, so that you've got some environment that you're actually learning and you understand.
Because most of the time when you're programming, you're not just programming in a void.
You're not just doing out—C out.
Throwback C++ stuff, but we're not just writing to the console.
We're not just writing to the command line.
We're actually like using the APIs of an operating system or using some kind of framework, or
something like that.
You see what I'm saying?
You need to have some kind of operating system or some kind of ecosystem that you specialize
and that you're an expert in, so that you can use it.
A lot of times, like I said, the choice of programming language is going to determine
the platform, but you got to have some kind of platform.
The next one here is a framework or stack.
This is closely related, but what I mean by this is that when I talk about the stack,
what it means is it's a set of technologies that work together that people use that are
commonly used.
One stack is a LAMP stack which is Linux Apache, MongoDB, PHP.
Right?
Okay, think I got that.
Okay.
There's a lot of different stacks out there, right?
What it means is like, " What are you using from the front end?
What are you using in the middleware and what are you using in the back end?"
What is the stack?
What is the database technology?
What is the front end and programming language that you're using and what frameworks?
Right?
There's a bunch of JavaScript stacks using Angular and JavaScript and Node.js and MongoDB
or whatever kind of database.
There's a lot of different stacks out there.
Pick one that people are commonly using that is from—don't invent your own stack and
become an expert or learn how to develop a net stack, because the thing is—again, if
you learn a programming language, that's useful, that's great, but we're not doing just console
apps for the most part.
If you learn a programming language in a development platform, that's great as well.
Maybe you can build an iOS app.
Okay, great.
What most companies and most real-world development is they're using some kind of stack.
They're using some kind of stack, the full stack.
Knowing the programming language, knowing a platform and knowing the framework or stack
is going to be the most valuable because that's what real world programming is.
You got to learn some kind of framework or stack as a developer.
Next, we're almost at the end here, actually, but we're not.
This is going to be a long video, my friends.
I will not spend too much time on each one, but these are important.
Basic database knowledge.
Almost every single developer today, almost every single software developer needs to have
some kind of database knowledge.
You need to know SQL.
You need to know relational databases.
I know that everyone loves document databases and no SQL, and that's great, but most of
the time you're still going to be working with the relational databases.
That's the majority of databases out there.
Now, it's great to learn document database technology and what not, but you got to learn
some kind of database technology.
You got to learn some database theory because most developers are going to have to fetch
data from the database, and most developers are going to have to put data into the database.
That's a lot of what you're going to be doing and you can't just rely on someone else
to do that for you or libraries.
You have to understand how this stuff works because most commercial applications, like
I said—especially, SAS applications today which is the majority of applications.
Even mobile applications have some kind of database and some kind of interaction that
you need to deal with it.
Next one, source control.
Again, this is one of those areas where you don't have to be an absolute expert, but
you got to understand stuff like Git.
Probably, Git is probably where most of you are going to be at today, but it's more than
just Git.
It's source control concepts.
It's the idea of checking things in, checking things out, merging branches, all of this
kind of stuff, versioning, complex.
If you become good at this, it's going to be important because every single job that
you take as a software developer, you're going to be using source control.
If you're constantly like not understanding, you got to get someone to help you with source
control all the time, that's not good.
You're going to be asked about source control on the interview.
You're going to use it from day-to-day operations.
Source control is something that you need to know, absolutely.
Build and deployment.
This is another one that I think a lot of software developers don't think that they
need to know anything about, but they do.
Today, we have DevOps.
I think I've talked about DevOps before.
Essentially, today, the software developers are expected to know how to actually build
the software and how to deploy that software.
They can't just throw it over the wall and throw it to the operations team.
Now, you have to sort of know how this stuff works.
You have to know how the continuous integration server works, how it builds your code and
all these things.
It's not complicated stuff, but you got to know this stuff.
You got to know how the build works, how the deployment works.
Some basics of this stuff so you can troubleshoot things, so that you're not the one breaking
the bill all the time.
Next up, another one.
Testing.
You got to know some basics, again, of testing.
More and more as we're working on Agile teams and then doing Agile development and
software development space.
Testing is important for everyone to understand because developers have to be able to test
their own stuff.
You got to know the basic concepts of testing and how to do it and how to test your own
code.
Also, how to test other people's code because, like I said, when in an Agile environment,
the focus is on the team.
You're going to probably have to do some testing.
You're probably going to have to make sure that you can test the code and you're going
to do that every week.
It's not like we have this big testing phase at the end like we did with waterfall development
with Agile development, testing is happening all the time.
Understanding that is really important.
Next up—plus it's going to make you a better developer overall.
Debugging.
This one is tough.
Again, a lot of developers don't actually spend time learning how to debug.
I've got a whole chapter in the book here in The Complete Software Developer's Career
Guide on debugging.
I'd recommend you check that out if you want to find out and know what I think is the best
way to debug, but you got to learn how to do it.
You got to become a good debugger.
You're going to spend majority of your time fixing bugs as a software developer.
Fixing bugs that you wrote.
There's this T-shirt and I'm trying to remember what it said.
It was like—I'm kind of like—It was like the detective in the murder mystery, except
that I'm also the killer.
That's what it's like being a developer because you're actually creating the bugs and you're
solving the murder that you actually committed in the code.
Learn how to debug.
Next up: Methodologies.
We're almost at the end here.
Methodology is another one that's really important.
You need to understand Agile and Scrum, and software development methodologies, how that—the
process of actually building the code today because it's not just that simple.
It's not just your job is to write code.
You even need to understand the actual the life cycle, how this stuff work and actually
be good at it.
If you understand Scrum and the principles of Scrum if you're working on a Scrum team,
you're going to be a lot more valuable of a developer than someone who just like, "Okay.
Well, what are we supposed to do?
What is the story point or how does this work?"
Understanding methodologies.
Again, I have it in this book, but not just understanding them like how they work but
why.
Why do we use certain methodologies in software development and why are they effective?
Yeah.
That's about it for these technical skills you need to have as a software developer.
Hopefully, you found that useful again.
You can find all that and more in the Complete Software Developer's Career Guide, but, yeah.
There's a lot to know.
It can be overwhelming.
I understand this, but you don't have to know everything, but these are kind of—what
I gave you in this video and in the book, in the chapter, is the things that I think
are critical that you need to know that every single software developer is going to need
to know.
These are the technical skills that are absolutely essential, because if you don't know these
things, you're not going to be able to operate in the real world as a software developer
because these are the things that you do when you use every single day and they're going
to make you effective.
All right.
That's all I got for you today.
If you have not subscribed already, make sure you click that Subscribe button below.
Click the bell so you don't miss any videos, and I'll talk to you next time.
Take care.
Không có nhận xét nào:
Đăng nhận xét