Skills of a Software Developer MEAP Version 5 Fernando Doglio pdf download
Skills of a Software Developer MEAP Version 5 Fernando Doglio pdf download
https://ebookmeta.com/product/skills-of-a-software-developer-
meap-version-5-fernando-doglio/
https://ebookmeta.com/product/skills-of-a-successful-software-
engineer-meap-v07-fernando-doglio/
https://ebookmeta.com/product/the-well-grounded-python-developer-
meap-version-5-doug-farrell/
https://ebookmeta.com/product/robotics-for-software-engineers-
meap-version-3-andreas-bihlmaier/
https://ebookmeta.com/product/elements-of-mathematics-a-problem-
centered-approach-to-history-and-foundations-1st-edition-toth/
Vegan Cookbook 2nd Edition Alice Barnes-Brown (Editor)
https://ebookmeta.com/product/vegan-cookbook-2nd-edition-alice-
barnes-brown-editor/
https://ebookmeta.com/product/industry-4-0-ai-and-data-science-
research-trends-and-challenges-1st-edition-vikram-bali-editor/
https://ebookmeta.com/product/fundamental-chemistry-with-matlab-
daniele-mazza/
https://ebookmeta.com/product/the-nordic-baltic-and-visegrad-
small-powers-in-europe-a-dance-with-giants-for-survival-and-
prosperity-1st-edition-hilmar-hilmarsson/
https://ebookmeta.com/product/wjec-eduqas-media-studies-for-a-
level-year-1-and-as-student-book-unknown/
Advances in Robotics, Automation and Data Analytics:
Selected Papers from ICITES 2020 Jessnor Arif Mat Jizat
https://ebookmeta.com/product/advances-in-robotics-automation-
and-data-analytics-selected-papers-from-icites-2020-jessnor-arif-
mat-jizat/
MEAP Edition
Manning Early Access Program
Skills of a Software Developer
Version 5
—Fernando Doglio
1
The start of your journey
• What skills not to focus on when starting the software developer career
• The skills that actually make for a good software developer
From the outside, the software industry looks very compelling if you think about it: many countries
have no unemployment around it, salaries are fair, there is always room to grow, travel is involved
in many cases, the option to work from your couch for a Silicon Valley company is there, I mean
really, why isn’t everyone working on it?
The truth is that while it might seem interesting, getting in is not that simple.
Finding your first job as a software developer can be challenging at best; most companies
looking for entry-level engineers require them to either have experience with some of the latest
frameworks and technologies or to understand a lot of advanced concepts such as design patterns,
software development best practices, and version control. Then, they’ll go into vague requirements,
such as having great “interpersonal skills”, or knowledge about other IT-related areas, what is that
about?.
The following job listing was created from multiple samples taken from internet, looking for Jr.
developers:
• Bachelor’s degree in related areas and a minimum of one year of experience in similar roles.
• Knowledge of secure software development.
• Intermediate skills associated with design, development, modifications, and deployment of
software, including object-oriented programming.
• Knowledge of other IT-related areas.
• Demonstrated software repository skills.
• Demonstrated effective communication and interpersonal skills.
• Self-motivated and works independently.
• Demonstrated problem-solving skills.
• Intermediate skills in C#, ASP.NET MVC, SQL Server, TypeScript and React.js.
• Experience using Git and Github.
Looking at that list, how can anyone trying to get into the industry not feel intimidated and
scared of applying? Anyone looking at that job posting will assume they need two more years, at
least, of experience before being taken seriously.
Having been through the same experience 18 years ago, I still remember the type of questions
I had:
• Do I even bother applying for the job? I only have 3 out of 10 of the required skills.
• Do I need to stop studying X and switch to Y now? Because this week everyone’s asking for
Y developers.
• How can I get experience if I’m looking for my first job?
They’re probably the same questions that any new developer looking to start their career has.
But here is the kicker: they’re normal. You’re not figuring out you’re not cut out to be a developer,
you’re only living through the Jr. Dev experience.
That is what this whole book is all about. I’ve been through the same struggles that any new
developer experiences, I’ve had my first underpaid job because I had no experience. I’ve met some
great people that taught me quite a lot about working in a team and I’ve also met some terrible
ones who, through their behavior taught me a considerable amount of things to avoid.
Throughout this book, I’ll be sharing the bits and pieces of my own journey. My hope is to show
you that you’re just getting started in yours and that the issues you’re facing and the doubts you’re
having, are completely normal and part of the developer experience-pack you bought when you
decided to live off of your coding skills.
For this chapter, however, I wanted to start by covering the basics: what exactly do you need
to work as a developer? There is a lot of noise on the internet and asking this question to Google
can bring up a lot of different articles. Everyone has their opinion, and most people tend to focus
on functional skills, things you need to learn before thinking of applying for a job.
In my experience they’re not the most relevant, nor the most important ones, you’ll pick those
up through experience if you have to. The truly important qualities of a good developer (even one
who’s never worked a single day in their life) are not technical.
Let’s look at both lists now: the common misconceptions of what is needed to be a developer
and the truly useful skills you’ll need.
1. You first need to do a requirement analysis to understand exactly what you need to do.
2. Then move on to planning your project to understand when to do those things and how
much time you’ll need.
3. Designing its architecture comes third. Once you know the “what” and the “when”, you have
to start thinking about the “how”, and the architecture will give you the blueprints for that.
4. Only then, you can start writing code. This is the section where most developers tend to
focus on, but as you can see, it’s not the first thing you’d normally do.
5. Testing your code and your product comes next, understanding if the previous step produced
the right output is a must-do before moving on to the next one.
6. Deploying your product. In other words, giving it to users so they can start testing it and
giving you feedback.
Because it’s a cycle, you’d take that feedback and normally start all over again, but you get the
idea.
Now, if you’ve never worked on a software project before then you’ve never had to apply most
of these concepts, and that’s perfectly fine. You don’t need to understand any of that to get your
first job.
Yes, they will be part of your tasks, and you’ll be applying this knowledge every day. But
turning it into an entry-level requirement for the role of Jr. dev is like asking an acting surgeon to
lead their first surgery. Eventually, they’ll be able to do it and they’ve probably read about it, but
you don’t want them doing it on day one.
And that is the same for you as a developer, you should not be expected to understand what all
these steps really mean on day one, you won’t be in charge of doing it all anyway. You’ll learn
about it because you’ll be part of the process.
Eventually, you might find shared concepts between programming and these other sciences
(such as sets in many programming languages), or you might find yourself implementing concepts
from other realms into your code (such as implementing the concept of gravity on a platformer
game), but none of this is something that requires a full degree before even starting to code.
1.1.4 Certifications
Certifications are tempting because they have that “not-as-long-as-formal-education-but-still-
useful” kind of vibe. And they do have their merit, but they’re not a hard requirement to get a
developer job.
Listing certifications on your Jr. dev resume shows you care about your learning and that you
care about improving your skills. This is indeed a good thing.
But it’s not a requirement. You won’t find job listings asking for particular certifications from a
Jr. developer, instead, they’ll be looking for knowledge about a group of technology. And this is
easier to achieve by following online courses or bootcamps.
What I’m saying here is: if you have to choose between investing in a certification or an online
course, go for the latter, get a broader education before you start narrowing down on a particular
subject.
1.1.6 Experience
Asking for experience from a Jr. dev is not only counterintuitive, it’s just plain silly. And I’ve been
there, I know how it feels when you read a job listing asking for Jr devs with experience in different
technologies. You’re sitting there, reading the listing trying to find a job so you can get the actual
experience. It’s like the egg and chicken problem.
My advice here is to ignore that part of the listing, it makes no sense after all. Just apply if you
feel comfortable with some of the other requirements or if you feel like you can pick them up
quickly.
The kicker is: if you’re applying for the job and are worried about the experience part, you can
showcase other types of experience:
• If you’ve done some kind of online course, you can list it here.
• If you have one or more personal projects published somewhere (i.e on Github, or
somewhere else), you definitely want to publish it here.
• If you’ve worked as a volunteer on something remotely related to IT, list it here.
Careful though, I’m not saying this is a must-do, requiring experience for an entry-level position
makes no sense, and it should not be a prerequisite. However, if you do want to address that point
on your application, listing some of the above items is definitely better than saying “none”.
1.2.1 Patience
Nothing says “I’m a Software Developer” like spending 3 hours debugging a piece of code, just to
figure out, the problem was a missing “,” somewhere in the middle.
You’ll go through this a lot, and that is no sign of “Juniority” or of lack of experience, trust me, I
go through that same process every now and then today, after almost 20 years.
Understanding someone else’s code requires time and effort, researching how to solve a
problem requires time and effort, writing code and getting it to work requires time and effort.
Patience is not a virtue for a developer, it’s a must-have. Copy and pasting code from the internet
will only get you half-way, the rest needs to come from you and there is a lot of trial and error
involved.
1.2.2 Determination
In-line with patience, you have to also understand this is not an easy profession. And I’m not
saying this to scare you off and throw this book away. On the contrary, setting the right
expectations is key to avoid getting discouraged when bad things happen during your journey.
The fact is, your chosen profession will be filled with roadblocks, with problems that once fixed
become ten. Bugs that take months to solve and each and every one of these situations will
become a reason for you to quit.
Trust me, I’ve wanted to quit programming multiple times during my career. The idea of
moving to the middle of nowhere, away from technology, and just growing tomatoes in the desert
is appealing to many devs inside our industry.
Is that the sign of a problem in software development? I don’t think so, but it is proof that ours
can be a very frustrating profession at times.
And that is why determination is a must-have skill for developers. Mind you, you can build it
over time. It’s hard to know if you’re determined enough until you’re faced with a situation that
challenges you. But if you’re already a determined person, someone who’s known to not give up on
the first try, then you’ll do fine as a developer.
Code review, for example, is a very common practice in software development that helps in
ensuring code quality by having a group of devs, reviewing the code written by someone else.
If you’ve never been through it, it might sound strange, but it’s actually a growing experience
for both parties involved if they perform it correctly:
• On the reviewing end, the group of developers reading the code need to understand that
their job is to improve the code by finding logic issues, missing standards, or even some
bugs.
• On the receiving end, you’ll need to understand that the feedback they’re giving you is not
personal. Showing your code like that can feel like that nightmare where we realize a little
too late that you’re already in class, naked in front of everyone. But trust me, they’re putting
their years of experience at your disposal, accept their feedback, make sure you understand
why it is given, and you’ll come out learning a lot.
There are other instances where feedback will come into play as well. Sometimes it’ll be
expected, like with performance reviews, and other times it won’t be, like getting an issue reported
on your open source project. Either way, receiving negative feedback is always a possibility, and
being open to it is a must.
Surviving negative feedback, especially when it’s not expected, can be hard if you’re not open
to learning from it.
I think it’s important to make a distinction between feedback that shows a negative quality of
our work (i.e a bug), versus non-constructive (negative) feedback that only shows how our work
has affected others to the point where they need to hurt or disqualify us with their words.
A negative piece of feedback has to be received as advice you didn’t ask for. There is always a
nugget of wisdom inside it, you just have to ignore the negative coating around it, cut through to
the core message and the lesson to be taken out of it. You should consider the rest as noise.
As a technical lead myself, I’ve received hundreds of performance reviews in my career, and
they’ve not always been positive. Whenever that happens, I always try to focus on getting to the
core of the problem, on trying to understand what caused that negative review so that I can avoid
that behavior in the future.
If you only see feedback as a bad thing, then you’ll start second-guessing your decisions and
the whole point of that feedback (which was to help you improve) will be lost.
This is why having these skills even before applying to your first job is a major advantage over
everyone else in your same situation. The moment your interviewer notices you can communicate
effectively, the battle is half won.
And how can you develop this skill? One way to do it is through writing.
Back when I started, both my written and spoken communication skills were terrible. I
remember spending 30 minutes writing “important” emails because I had to go through them
multiple times, adding words and explanations, asking colleagues to review them to see if they
made sense or not.
It was only when I started making the conscious effort to write online (articles for my own blog)
that I started learning how to write more eloquently, you can say I started finding “human friendly”
ways of explaining concepts. This, in turn, helped my spoken communication skills as well
(something “clicked” in my brain).
And through that and other working experiences, I was able to learn how to effectively talk to
others (which helped me in my path to leading teams as well).
So yes, knowing how to communicate with others is a major skill to have, the great news is that
you can start practicing it right now, for free, and figure out what your internal voice sounds like.
1.3 And what about after you get your first job?
The trick to the career path of the software developer is to remember that you’re not done when
you get your job. That only means you’re just getting started.
It’s like getting to the max level on your favorite MMORPG and thinking you beat the game,
that’s not right, in fact, you just unlocked a whole new level of content specifically designed for
you.
And it’s the same thing with your career. Getting the job doesn’t mean you’ve mastered the
trade, it just means you were able to stand on the first step of a huge ladder. The skills I listed
above will have to be developed and maintained throughout the course of your life, and the more
you work on them, the better you’ll do.
• Keep honing your communication skills, they’ll always be useful, but the higher on the ladder
you climb, the more important they’ll become.
• Understanding how to grow from negative feedback will keep you from getting stuck in your
career.
• Working on your patience and determination will ensure you never meet a problem you can’t
solve. These two skills have taught me that there is nothing impossible in our profession, as
long as you have enough time and people to work on it. That’s something I always like to
say to clients asking if their idea is possible. The answer is always yes, no matter how crazy
or difficult the request is, as long as you have the patience and determination to do it.
• Staying relevant in our industry is a must for anyone who’s interested in advancing their
career. That means looking outside your own box to find out about what others are doing.
Just raise your head every once in a while, if nothing else, to make sure you’re not the only
one around.
The rest of this book will cover other areas of work you’ll need to focus on once you’ve decided
to become a software developer, and they are just as important as the ones covered here. But
keep these in mind always, as they’ll be acting as the building blocks for everything else you learn
in the coming chapters.
1.4 Summary
I literally knew I wanted to be a software developer before I owned my first computer. I had made
the choice based on the value computers were generating back when I was a kid. But when it was
time for me to start the journey and make the jump into the real world, it wasn’t just difficult to get
in, it was scary and unwelcoming.
I had no guide, no map that would help me navigate the maze that was job interviews or even
job listings. I would spend a few hours every weekend going through the jobs section of my local
newspaper looking for opportunities for Jr. devs without experience.
It took me a while to find my first job, and while it was a terrible, underpaid one, I learned as
much as I could from it until it was time for me to move on.
Now internet makes it a lot easier to interact with people, find new jobs and opportunities, but
the difficulties are, incredibly enough, still the same. Companies are still looking for entry-level
roles with experience, they’re still focusing on the wrong set of skills and then wonder why they
can’t get the right candidates.
If you want to be ready for the software development career, amongst all the technical skills
you want to learn, remember that you also need to focus on the non-tech ones:
• Patience
• Determination
• Being open to learning
• Being open to receiving feedback
• And knowing how to communicate
These will help you develop anything else you want and will show potential employers you bring
more value with you than someone who’s just memorizing some technical documentation.
In the next chapters, I’ll start focusing more on the code aspect of the career, I’ll give you some
hints at best practices and I’ll show you how to write code that everyone wants to read.
2
Starting out - Learning how to code
— Teidän nimenne?
— Nicolas Beaurain.
— Teidän ammattinne?
— Te siis tunnustatte.
— Kyllä, herra.
— Ei mitään, herra.
— Teidän vaimonne?
"Kun minä kerran olin nuori, niin minä tutustuin hra Beaurainiin
tällä paikkakunnalla, eräänä sunnuntaina. Hän oli apulaisena eräässä
rihkamatavarakaupassa, ja minä olin myyjättärenä eräässä valmiiden
vaatteiden kaupassa. Minä muistan sen vielä kuten eilispäivän. Silloin
tällöin minä tulin tänne viettämään sunnuntaita erään ystävättäreni,
Rose Levéquen seurassa, jonka kanssa minä asuin Pigallen kadulla.
Rosella oli rakastaja, mutta minulla ei ollut mitään sellaista. Se on
hän, joka toi meidät tänne. Eräänä lauantaina hän ilmoitti minulle,
nauraen, tuovansa minulle seuraavaksi päiväksi toverin. Minä käsitin
hyvin, mitä hän tarkoitti; mutta minä vastasin, että se oli
tarpeetonta. Minä olin järkevä, herrani.
"Me siis saavuimme Bezonsiin. Ilma oli ihana, oli niin ihana, että
sydäntä hiveli. Kun on kaunis ilma, niin minä aivan hullaannun, niin
nyt kuin muinoinkin, ja kun minä olen maalla, niin minä joudun
päästä pyörälle. Vehreys, lintujen viserrys, lainehtiva viljavainio,
pääskysten lento, nurmen tuoksu, valmut, päivänkakkarat, kaikki ne
saavat minut hulluksi! Kaikki se vaikuttaa kuin samppanja, johon ei
ole tottunut.
Rouva jatkoi: "Silloin hän käsitti, että minä olin järkevä, tuo
nuorukainen, ja hän alkoi hakkailla minua kiltisti kunnon miehenä.
Siitä lähtien hän saapui joka sunnuntaina. Hän oli kovin rakastunut
minuun. Ja minä pidin hänestä myöskin kovasti, mutta siihen aikaan
hän olikin pulska nuorukainen!
Updated editions will replace the previous one—the old editions will
be renamed.
1.D. The copyright laws of the place where you are located also
govern what you can do with this work. Copyright laws in most
countries are in a constant state of change. If you are outside the
United States, check the laws of your country in addition to the
terms of this agreement before downloading, copying, displaying,
performing, distributing or creating derivative works based on this
work or any other Project Gutenberg™ work. The Foundation makes
no representations concerning the copyright status of any work in
any country other than the United States.
1.E.6. You may convert to and distribute this work in any binary,
compressed, marked up, nonproprietary or proprietary form,
including any word processing or hypertext form. However, if you
provide access to or distribute copies of a Project Gutenberg™ work
in a format other than “Plain Vanilla ASCII” or other format used in
the official version posted on the official Project Gutenberg™ website
(www.gutenberg.org), you must, at no additional cost, fee or
expense to the user, provide a copy, a means of exporting a copy, or
a means of obtaining a copy upon request, of the work in its original
“Plain Vanilla ASCII” or other form. Any alternate format must
include the full Project Gutenberg™ License as specified in
paragraph 1.E.1.
• You pay a royalty fee of 20% of the gross profits you derive
from the use of Project Gutenberg™ works calculated using the
method you already use to calculate your applicable taxes. The
fee is owed to the owner of the Project Gutenberg™ trademark,
but he has agreed to donate royalties under this paragraph to
the Project Gutenberg Literary Archive Foundation. Royalty
payments must be paid within 60 days following each date on
which you prepare (or are legally required to prepare) your
periodic tax returns. Royalty payments should be clearly marked
as such and sent to the Project Gutenberg Literary Archive
Foundation at the address specified in Section 4, “Information
about donations to the Project Gutenberg Literary Archive
Foundation.”
• You comply with all other terms of this agreement for free
distribution of Project Gutenberg™ works.
1.F.
1.F.4. Except for the limited right of replacement or refund set forth
in paragraph 1.F.3, this work is provided to you ‘AS-IS’, WITH NO
OTHER WARRANTIES OF ANY KIND, EXPRESS OR IMPLIED,
INCLUDING BUT NOT LIMITED TO WARRANTIES OF
MERCHANTABILITY OR FITNESS FOR ANY PURPOSE.
Please check the Project Gutenberg web pages for current donation
methods and addresses. Donations are accepted in a number of
other ways including checks, online payments and credit card
donations. To donate, please visit: www.gutenberg.org/donate.
Most people start at our website which has the main PG search
facility: www.gutenberg.org.