hi everyone we've been wanting to do one
of these episodes for programmers and
developers forever but none of us I've
ever worked as one so that made writing
this episode a little tricky fortunately
for us the guys down extact exchange
have heroically stepped in and offered
to make this episode happen in fact they
offered up so much great information
that we're going to make this a
two-parter for those of you who've never
heard of them Stack Exchange is a great
resource for developers pretty much
everyone I know goes there when they
have questions so especially if you're
starting out put it on your list of
places to visit all right onward
programmers or as many of them prefer to
be called developers what do they
actually do most people have a vague
image of a guy sitting in the basements
in front of the computer typing arcane
commands into a terminal and chugging
Mountain Dew of course there's much more
to it than that
so what does it mean to be a developer
like most jobs developing software it
takes on a lot of different forms but
the heart of it comes down to
problem-solving designing a new system
architecture implementing a feature
finding and fixing bugs all of these
come down to analyzing a problem
breaking it down into its essential
pieces and coming up with a solution as
a developer on a team you can pretty
much consider yourself chief problem
solver so what does that kind of
problem-solving look like David here had
a pretty helpful anecdote the third
class he took in his computer science
program was designed to introduce
students to real-world software
development and he thought that sounded
great they get to work on some
real-world problems that people have so
he was a bit surprised when they got
their big group assignment that counted
for most of their grade he and his
partner were told to build an M&M
sorting robotic arm using Legos a pair
of servo motors and a webcam this was
very different from other classes he had
taken up to that point those were pretty
straightforward
here's a loop now go write a bunch of
stuff using loops this class was asking
him to do things they had no idea how to
do there was no chapter in the textbook
on sorting M&Ms there was no website
they could go to with a tutorial and how
to build a robotic arm out of servos and
Legos at least there wasn't then there
probably is no they just had to figure
it out now one way to look at this would
be to say that he spent four weeks
learning some truly useless skills and
since that class he's never worked with
servo motors web cams pathfinding
algorithms or M&Ms but in reality this
turned out to be exactly what real-world
developments like the next summer he got
an internship at a real software company
and the first day he showed up he was
given an assignment working with
technologies he'd never heard of solving
problems that nobody at the company had
solved before real development is about
solving
problems whether you're a game developer
working on a physics system a web
developer working on a user interface or
a quantitative finance developer working
on the new financial model it all comes
down to breaking down the problem and
finding a solution so if that's what
being a developer is what makes someone
really great at this first a great
developer is someone who is
exceptionally good at analytical and
abstract thinking you need to be able to
take a system apart analyze each piece
and figure out how it all fits together
if you're the kind of person who even
thinks about being a developer you've
probably done this from an early age
growing up David here would spend hours
and his best friend garage taking things
apart computers vacuum cleaners TVs
whatever they could get their hands on
so if analytical thinking is at the core
of being a developer how do you get
better at it
simple by finding ways to feed the
analytical side of your brain study math
science logic proofs even puzzles
anything that emphasizes understanding
and applying concepts rather than just
memorizing facts and figures dive into
existing systems and figure out how they
work ask yourself what problems the
designers were trying to solve here and
why they solved it the way they did take
things apart and put them back together
literally and metaphorically analyze the
games you play and the software you use
to figure out what makes them work why
the designers did it the way they did
how they could have done it better all
of these things will build up your
analytical thinking and make you a
better developer and this touches on the
second most important trait of a
developer every developer has to solve
problems but what separates good ones
from great ones is their ability to
solve them quickly and elegantly and
often what makes the difference there is
having a wide body of tools and
experience to draw from think of it this
way I'm pretty sure that if you gave me
the tools I could make something
resembling a tree house
now give those same tools to a real
carpenter and he would do it much faster
and end up with something much less
likely to kill you the difference
between me and the professional is that
the professional knows what tools to use
for each job specific techniques for
solving problems he's seen before and a
whole lot more about what needs to be
done the same applies to programming
what separates the experts from the
novices is a wide knowledge of what
tools and techniques exist and a deep
knowledge of when and how to apply them
so how do you get better at this by
being an explorer computer programming
may have been around a while but it's
still very much in its infancy so new
techniques and approaches are being
developed all the time if you want to be
a great developer you need to stay on
top of these changes when new languages
frameworks techniques or methodologies
surface explore them and see what they
can teach you don't just read about them
get your hands dirty and write some code
you may find a new tool that'll be
perfect for a job someday or a new
library that does exactly what you need
a language that's tailor-made for
particular problems or you may just
learn a new approach to solving problems
the goal is to accumulate as many tools
on your tool belt as possible so that
when the time comes you'll know exactly
what to use unfortunately explorations
generally discouraged in the workplace
often for good reason your boss doesn't
want you to be constantly trying out the
latest technique or language on a
critical production system so most of
your exploration will happen on site
projects outside of work and that's just
part of being a good developer the best
developers are constantly writing code
and exploring new tools and techniques
in and out of work of course exploration
also means learning from other people
everybody approaches problems
differently so looking at how other
people solve problems is essential to
widening your perspective and learning
to be a better developer there are a few
different ways to do this first read
other people's code there's a wealth of
sample and open source code available on
the internet so don't be afraid to take
an existing project apart and see how it
works
you'll learn how they structure the
project how they solve particular
problems and probably what they could
have done better second find smart
developers to work with if you're a
student try to get an internship at a
company where you'll be writing
production code find an open source
project that interest you and start
submitting fixes and suggestions when
you're on a team seek out the more
experienced developers look at their
code and ask them to critique yours
finally get involved in the broader
community there are a dozen places to do
this online hacker news github IRC even
good ole slash dot or stack overflow
better yet get involved in open source
and give back to the community if you're
in a major city find a local developer
group to meet up with all of these will
help you to explore the wide wide world
of programming they'll teach you new
ideas new techniques and new ways to
solve problems well that's it for part
one next week we'll be back to talk
about the importance of communication as
well as many other skills of developer
needs see you then