We were all new at one point, so it might be a little difficult at first. However, if you are just becoming a professional software developer, this article contains some practical and easy-to-understand advice.
All the soft skills you’ve learned won’t help you much if you can’t actually write code and develop software. Maybe you’d make a good manager or administrator, but not a software developer. But if you’re reading this part of the book, I assume you’re interested in becoming a software developer — or better yet — so let’s talk about the technical skills you need to know.
Pick up the skill pack
Now, this is a topic that tends to overwhelm many junior software developers, because you may feel like there’s so much to know that it’s hard to even know where to start.
I’ll try to break it down into the most useful and beneficial technical skills that will best help you become a software developer.
This chapter is by no means an exhaustive list of all the technical skills you might need as a software developer, but I have tried to list the necessary skills and give an overview here.
So, without further explanation, here’s a quick rundown of what I think are the most important technical skills.
A programming language
I think we’d better start with that, don’t we?
You can’t be a programmer if you don’t know a programming language – you know what I mean, right?!
I’ll be quick to say, however, that choosing a programming language isn’t as important as you might think.
Instead, let’s talk about why I recommend starting with a programming language rather than trying to learn everything under the sun.
Many novice programmers try to enrich themselves by learning several programming languages at once or before they attempt their first job as a software developer.
While I think you should eventually learn more than one programming language, I recommend not doing it in advance, as it just leads to confusion and diverts your energy from the many other technical skills you need to learn.
Instead, I recommend that you dig deep and learn the details of a single programming language so that you can be confident in your ability to write code in that language.
Recommended books and articles:
I choose some entry-level books and articles to recommend, and you can choose to buy more in-depth books after you finish learning them
-
Java
-
<< Head First Java >>
-
<<Effective Java Chinese Version (3rd edition)>>
-
-
Python
- << Python programming from beginning to Practice >>
-
JavaScript
-
<< JavaScript from beginner to Master >>
-
<<Javascript Object-oriented Programming Guide >>
-
-
Go
- << Go Language Learning Notes >>
- Go Developer Roadmap
How to construct code
After learning a programming language – or preferably at the same time – I firmly believe that the next thing you need to know is how to properly build your code.
What do I mean by build code?
I mean write good, clear, understandable code that doesn’t require a lot of comments because the code itself is generic.
Many software developers go through their entire careers without learning this skill, which is unfortunate because this is the primary way I and many others judge software developers’ skills and abilities.
Good code structure shows a focus on the craft, not just getting the job done.
Building code is actually an art part of software development, but it’s also important because you and your colleagues having to use code will spend more time maintaining existing code than writing new code.
I’m not going to go into the details of how to properly build code in this book – as I said – I’ve provided you with a great resource, but you should try to learn how to write good, clean code from the start rather than learning this skill after the fact.
I can guarantee that even if you are a beginner, if you can write good, clean, concise, understandable code that expresses its meaning in the structure itself, then anyone who sees your code will think you are an experienced professional.
At some point, you will, or at least down the road, because you will see coding as a career, not just a job
Recommended books and articles:
- <<Head First design mode >>
Object-oriented design
This is debatable, especially if you’re learning a non-object-oriented (OO) programming language, but enough of the software development world takes OO design into account, so you need to make sure you understand it.
Object-oriented design is a way of designing complex programs that decompose them into single classes or objects (instantiations of classes) that encapsulate functionality and have specific roles and responsibilities.
In software development, we always try to manage complexity.
Thinking in terms of objects helps us do this because it allows us to define and design a complex system from a bunch of interacting components, rather than trying to solve the whole complexity as a whole.
There are many functional programming languages today, but the most popular languages and patterns you’ll find in software development are still influenced by object-oriented design and analysis.
You should have a good understanding of what classes are, what the different types of inheritance are – and when to use them – and the terms such as polymorphism and encapsulation.
Algorithms and data structures
If you attend a traditional university or university program to earn a degree in computer science, this will be a large part of what you will learn or will learn.
Algorithms are a common approach to solving various computer science/programming problems.
For example, several algorithms are commonly used to sort lists of things programmatically. Each of these sorting algorithms has a different set of attributes, including speed, memory size requirements, and the ideal data type it works with.
There are many such algorithms in computer science, and it is also important to understand how to write their own variants to solve the tricky problems you might encounter when solving real-world programming problems.
Often, familiarity with the algorithm allows one developer to solve a problem in an hour that might take another developer days to figure out.
Unless you are familiar with and familiar with algorithms, you may not even know that an elegant solution already exists. So, for that reason alone, I think it’s a valuable skill.
Data structures fall into a similar category and are used in conjunction with algorithms.
All software developers should be familiar with several data structures, including:
- Arrays or vectors
- List of links
- The stack
- The queue
- The tree
- The hash
- set
With a good grasp of data structures and algorithms, you can easily and elegantly solve many difficult programming problems.
When I first started programming, I was terrible at data structures and algorithms because I was mostly self-taught.
It soon became clear how useful these skills would be in the real programming world, as I encountered problems I didn’t know how to solve before that were now so easy and fun.
In fact, I think it’s one of the most interesting areas of software development. It’s very effective to develop a clean, elegant solution by solving a tough problem and leveraging data structures and algorithms.
Learning these things is a challenge, but well worth it. It’s one of those skills that can put you way ahead of your peers. Most software developers are ill-equipped in this area.
If you want to make it through an interview with a company like Microsoft or Google, you definitely need to master this skill.
Recommended books and articles:
- << Algorithm (4th edition)>>
Development platform and related technology
You should have some experience with at least one development platform and the associated technology or framework that comes with it.
What does platform mean?
Well, usually it means operating system (OS), but it can also be applied to other operating system-like abstractions.
For example, you might be a Mac developer or a Windows developer focused on the Mac or Windows operating system, but you could also be a Web developer focused on a specific Web platform.
I don’t want to boil this down to a discussion of what exactly a platform is — different people will have different opinions — but for the sake of the discussion, I’ll define a platform as the specific environment you develop, with its own ecosystem and particularity.
Again, this is another thing that I don’t think is so important about what you choose, just like what you choose.
Companies often hire developers to develop specific platforms or technologies.
It’s easier to get a job as an iOS developer if you have expertise in that particular platform.
This means becoming familiar with the platform itself, as well as the development tools, idiomatic patterns, and common frameworks that programmers typically use to develop for it.
You might think that the choice of programming language dictates the platform, but it rarely does.
Take C# today. You can become a C# developer and write code for Windows, Mac, iOS, Android, Linux, and even embedded systems.
So don’t choose just one language; Choose a platform.
Framework or technology stack
In addition to learning specific programming languages and platforms, I strongly recommend learning a framework or, better yet, a complete development stack.
What is a framework?
What is a technology stack?
A framework is simply a set of libraries for developing code on a particular platform or multiple platforms. It generally makes common programming tasks on the platform easier.
Back to the C# example. Most C# developers use it. NET Framework to write C# applications. The.net Framework is made up of many libraries and classes that allow a C# developer to work at a higher level of abstraction because he doesn’t have to completely reinvent the wheel every time he wants to do something.
For example, part of the.NET Framework contains code for processing images. This code is very difficult to write from scratch, so the framework is a huge benefit for C# developers who write code that needs to manipulate images in some way.
The technology stack is a little different. A technology stack is a set of technologies, usually including frameworks, that are often used together to create complete applications.
MongoDB is a database technology.
Express.js is a Node.js framework for creating Web applications.
AngularJS is a front-end JavaScript framework for creating user interfaces for Web applications.
Finally, Node.js is a runtime environment for developing Web-based applications in JavaScript.
Technology stacks make it easier to create applications because they provide many common paradigms that developers use to develop applications, so knowledge can be easily shared and a specific set of technologies can be ensured to work together.
Learning the technology stack can be very valuable because it means you have all the skills you need to develop a complete application. Many companies with applications developed using a particular technology stack will be looking for software developers who are familiar with the stack and can run it immediately.
Basic database knowledge
Although the database landscape has changed a lot over the years, I don’t think databases are going away anytime soon, so I thought you probably should know something about them, right?
At the time of writing this article, there were two main database technologies: relational and document databases.
I would say that today’s developers should be at least familiar with relational databases, and probably have some knowledge of non-relational databases as well.
In software development, databases are often used to store data for applications.
Of course, some teams have dedicated database developers or database administrators (DBAs), but that doesn’t keep you from at least understanding the basics of the database.
At the very least, you should know:
- How the database works
- How do I perform basic queries to retrieve data
- How to insert, update, and delete data
- How do you connect data sets together
In addition, you may want to learn how to programmatically retrieve and store data from code using the platform and/or framework of your choice.
Most developers are expected to write code that interacts with databases.
Recommended books and articles:
-
Relational database
-
<<MySQL must know must know >>
-
<< high performance MySQL>>
-
<< MySQL>>
In addition, the official documentation of MySQL, written is also very good, good English readers, can also have a look.
-
-
Nonrelational database
- < < Mongo combat > >
- MongoDB Best Practices – Ongoing Updates
Version control
Version control is an integral part of any software development project.
Back in the day, before we used version control, we would own all the files on a project and share them over the network, or we would copy the project code back and forth on a USB stick or hard drive.
At least that’s what I did when I was in college, when I was working on projects and graduation projects.
But I was younger. That was stupid of me. You don’t have to.
Almost all professional developers today should know how to use version control to submit code, review code, and hopefully incorporate changes from multiple sources.
The most basic level of versioning allows you to keep a history of changes made to different files in a software project.
It also allows multiple developers to work on the same code at the same time and merge those changes together.
I won’t go into the details here, but you should know how to use at least one version control system, and you should be familiar with most basic source control concepts.
Almost all professional software development teams use some version control in today’s software development world.
Recommended books and articles:
- I highly recommend “Git tutorial” text + pictures + video.
Text + picture + video.
Relatively easy to understand
- Illustrated Git by marklodato
Build and deploy
Today, most software development projects have some sort of automated build and deployment system.
There are several different software applications that help teams automate these two tasks, which were once manual, and still are for some teams.
What is build and deploy, you ask?
Good question.
At a minimum, the build system compiles all code and makes sure there are no compilation errors.
Complex build systems can also run unit or user tests, run code quality checks, and provide some reports on the current state of the code base.
The deployment system is responsible for deploying the code to a production machine or to some kind of test environment.
You don’t have to be an absolute expert on these technologies, but it’s important to at least understand the basics of how these systems work and the process of building and deploying code.
Often, the actual responsibility for creating and maintaining build and deployment systems belongs to a fast-growing field called DevOps (short for Developer operations).
However, that doesn’t excuse you from understanding at least the basics of how the process works.
Recommended books and articles:
Jenkins official website
<< Continuous delivery >>
test
In the past, developers didn’t have to know about testing.
We would write a bunch of code and “throw it up against the wall” to a bunch of testers who would find all sorts of bugs in our code, and we would fix them, and that was it.
No longer.
With so many software projects using so-called agile processes (we’ll talk more about this when we discuss methodologies), software developers and testers must work more closely together.
** Quality does become the responsibility of the whole team -** I think it always has been.
That being said, you need to know something about testing.
You should be familiar with at least some basic terminology, such as:
- White box testing
- Black box testing
- Unit tests (not real tests)
- The boundary conditions
- Test automation
- The acceptance test
I assume you want to at least be a good developer – test your code before you give it to others.
If you really want to be a professional, not just a hacker, it’s non-negotiable.
debugging
Ah, many a novice software developer lays his dreams on the rock of a debugger.
Everybody wants to write code, right?
But doesn’t anyone want to debug their code? Did you hear that?
Truth time.
As a software developer, you’ll spend about 90% of your time determining why your code doesn’t work.
I know it’s not glamorous. I know you just want to write new code all day, but the world doesn’t do that.
If you use test-driven development such an approach, you’ll probably spend very little time with the debugger, but no matter what you do, no matter how much you try and get around it, you’ll have to learn how to debug your code or someone else’s.
So instead of taking a haphazard approach to what you know must be done, grit your teeth and learn how to do it effectively.
methods
Do you still have a list of things you need to know? So scary!
If not, there’s one more. – But I promise this is the last one.
While some software development teams are just starting to write code and work on it when it’s done, most have a few methods that they at least pretend to follow.
(Note, by the way: Don’t expect any team to really follow the software development methods they claim to use. I don’t mean to be cynical or accusatory here. I’m just a realist, and I happen to know a lot of people who say they’re doing software development methods like Scrum because they have meetings every day.)
Therefore, it is important to be familiar with at least some of the basic ideas behind the most common software development methods.
Today, I want to talk about waterfall development and agile development.
Most teams claim they are doing agile. Agile itself is a very loose concept, but there are some practices, and, DARE I say it, if you want to be able to talk talk, you can talk talk, and fit in with the Agile team, you should pay attention to rituals.
We’ll discuss this in more depth in the section on software development methodologies.
Recommended books and articles:
Overwhelmed? Don’t
I know it’s quite a lot, and I’ve barely gone into most of these topics.
Now you may feel a little overwhelmed, and you don’t know most of these technical skills.
it doesn’t matter You shouldn’t – unless you’re already a professional software developer, in which case, shame on you! Just kidding. I love you, but you’d better brush up on those skills. – Really.)