
Don’t Believe Anyone Who Tells You Learning To Code Is Easy - sumukh1
http://techcrunch.com/2014/05/24/dont-believe-anyone-who-tells-you-learning-to-code-is-easy/
======
retrogradeorbit
"They don’t tell you that a lot of programming skill is about developing a
knack for asking the right questions on Google and knowing which code is best
to copy-paste."

No, no, no! This always frustrates me. This is not 'coding' (maybe it is, and
we should be doing less of it, and more programming). This is gluing together
pre-coded snippets and trying to make it work. Continuing to do this is an
impediment to getting better. Thinking that somehow this is what 'coding' is,
is missing the point.

I will read a stack overflow page perhaps in a search for some direction, look
at all the 'solutions' like surveying a landscape of others approaches to the
problem. Then I'll throw them all away and code my own. Possibly it will share
a lot with one of the answers, what I would consider a good approach. But a
literal copy and paste just doesn't happen. I would consider a copy and paste
a recipe for inviting trouble, because you haven't really reasoned through the
problem yourself, and thus don't really understand the solution intimately.

Programming is a process of mental reasoning around your problem with an eye
on the form of reasoning computers use, so you can express that reasoning to
the computer in the language you're using. Because computers don't reason like
humans 'reason' (ie. humans don't really 'reason'...), knowing how a computer
reasons and behaves is alien and takes time to understand and learn and it
takes time to become quicker at comprehending this. This is the path of
becoming a better programmer. Gaining that experience so the process is less
alien and you more easily can fathom how a computer will respond and behave
with a certain approach of laying out of the logic you are trying to express.

Copy and paste doesn't help you at all with this. In some cases it may prevent
you learning essential lessons and hinder your improvement.

~~~
ronaldx
Absolutely disagree.

I personally learned (as I think many people did) by copying code out of
books. Whenever something went wrong, I had to figure out whether it was my
typo or the book's typo or my conceptual error or the book's conceptual error.
That process helped me to learn a lot, and quickly. If everything went
perfect, I got to play some creative game which I loved and gave me a sense of
acheivement that helped me to progress.

I no longer do this, because it's not relevant to me at this stage of my
learning, but I view that as an important part of my early learning process.
If you reflect on your own early learning process, I would be extremely
surprised if you didn't copy and paste code. Frankly, you are surely still
dependent on other people's code now, you just might call it a 'library'
instead.

I agree if you're saying professional developers should avoid copy-paste
(there are also legal consequences), but new learners can make great progress
by using copy-paste. I would say it's an _essential_ part of studying what
other people have done.

~~~
redshirtrob
I think there's a large difference between copy-paste and what you're
describing (which I'll dub 'manual transcription'). I have no formal training
in learning or cognition, but I do have quite a bit of personal, anecdotal
evidence to suggest that manual transcription is far more useful, from a
pedagogical standpoint, than straight copy-paste.

Rather than take a boring example from my programming career I'd rather draw
from my brief mathematical studies in college. In undergrad I was taking a
course on Real Analysis. The course redefined, much more rigorously, certain
concepts that I had understood at a much higher level--think the limit,
derivatives and the Riemann Integral. Suffice it to say that these new
concepts challenged my understanding of introductory Calculus, and when I was
tasked with writing proofs based on the underlying concepts (e.g.
neighborhoods), I struggled.

In what can only be described as frustration I decided I was going to start
copying the proofs over and over. I repeatedly transcribed half a doze proofs
for a few days straight (I did each one a few times each night). A strange
thing happened. I began to understand the proofs. By that I mean I started to
understand the intuition required to make the transition between each step of
the proofs. At that point I found the material much more accessible. Reading
the book was easier, the lectures made more sense, I could do homework, and
consequently I could complete the exams.

I like this example because there is no copy-paste alternative. I had to
engage with the material, but I chose to engage at a very mechanical level.
Still, there was something about the process of reading and writing that aided
in understanding the material.

I don't believe you can get that with copy-paste unless you find some other
way to engage with the code.

~~~
ronaldx
I'm very interested in whether or not manual transcription is pedagogically
beneficial.

I personally write a lot. I certainly find it useful to do that.

However, I would not normally recommend Zed Shaw "Learn Code the Hard Way"
type of method of writing out over and over again. I think it probably works
and you can do it yourself, but I think it's quite inefficient. I don't need
to type 10 PRINT "HELLO" 20 GOTO 10 more than once to get a good sense of
what's going on.

I think you most of all benefit here from the time you're forced to put in. If
you can understand nothing, there's really no other sensible thing that allows
you to concentrate for the time you need to make decent progress.

However, I don't think this means transcription is pedagogically ideal. IMHO
building something for yourself is more effective; getting expert tuition is
more effective: in terms of time spent vs benefit received.

------
rdtsc
You need multiple things to come together. Some are abstract and general, some
are more specific. You need to know the tools you are using, the capabilities
of your platforms.

At some lowest level it is about solving problems and knowing how to drill
down and understand requirements, split a large problem into sub-problems. In
that respect it is not unlike an architect or an engineer or carpenter.

Then it comes to about learning how to translate to an intermediate mental
representation. Here where you you already think about the typical language
paradigms. Like someone used to object oriented design starts seeing objects,
factories, inheritance hierarchies. Someone used to actor based programming
(like Erlang) starts seeing actors sending messages to each other. A Haskell
programmer starts thinking about type-classes (presumably, I am not one).

Then it comes down writing it. Here one needs to know the tools in detail. The
specific language, platform, API. Say something object oriented at the higher
level could become something in C++, Java or Python here. Here is where
Google-ing helps. Knowing that say oh Python has this cool built-in module
that can help me. Or yeah, I'll use a smart pointer here. Well you have to
know about the smart pointers.

Then here is boring but important stuff. Knowing how to use version control.
Knowing how to estimate time, communicate with team-mates. Not being stupid
about security.

Anyway a lot of things have to come together to make someone a successful
programmer in the general sense. Some acquire these capacities formally by
going to college. Some acquire these on their own.

The interesting thing is that regardless of how it was acquired, the usual
instinct is to discount it while looking back. "Oh I just write Python, here
is a book on syntax, learn it and start programming". That always somehow
seems easy to programmers. And I have made the that mistake. Friends and
family member I have tried to show/teach programming.

~~~
alelefant
"And I have made the that mistake. Friends and family member I have tried to
show/teach programming."

I'm just curious, knowing what you know now, how would _you_ go about trying
to show someone how to program?

I may have that opportunity soon and I was going to suggest thinking about a
simple yet everyday problem that arises, and try to make it better with an app
(could be phone, web app, client app, etc).

~~~
paulbaumgart
I learned programming with HTML/PHP. It's great in that HTML is really easy to
understand and lets you draw colorful text and pictures to the screen almost
immediately. Then, you can jump to Turing-completeness with a new kind of tag,
"<?PHP" that can handle form inputs and generate new HTML!

And then get them over to Python or something ASAP. PHP doesn't have enough
structure for a beginner to learn good software design principles, it's best
kept to just teaching a thing or two about loops and control structures.

Teaching HTML + JS is tempting, but then you kinda have to explain the whole
DOM too, which just makes things complicated.

------
gradys
>They don’t tell you that a lot of programming skill is about developing a
knack for asking the right questions on Google and knowing which code is best
to copy-paste"

This is a misleading simplification. I'm sure I'm preaching to the choir here,
but I'm going to elaborate anyway.

Learning to program isn't fundamentally about learning what text to type in to
a box somewhere. It's about learning to think computationally. "Think
computationally" is vague and doesn't mean very much to the beginner. That's
because it's something you need to learn with practice.

Think about writing in normal human languages. You could say there are two
things going on when you are writing an essay, for example. At one level, you
are thinking about the concepts. What are your arguments? How are you going to
support them? At another level, you are thinking about how to write them down
-- how to encode them in a way that readers will understand.

The same distinction exists in programming. At one level, you need to think
computationally. What are the inputs I have access to? How can I use them to
produce the right outputs? What data structures should I use? How should I
handle this edge case? At another level, you are thinking about how to write
all of this down so that the computer will actually be able to do it.

Copying and pasting will help you with the second part -- figuring out how to
write down the structures you come up with -- and real, experienced
programmers do that all the time, but it won't help you with the first part --
figuring out what structures to write down.

~~~
jimbokun
"Learning to program isn't fundamentally about learning what text to type in
to a box somewhere. It's about learning to think computationally."

But learning how to _start_ programming isn't about that at all, even a little
bit.

Writing your first program is learning what a text editor is (no, it's not
quite the same as a word processor), maybe learning about the command line
interface on your computer for the first time, learning about the various
dependencies between the tools and libraries you need to install to get
started. There is Googling and discovering tutorials that are out of date or
have mistakes in them, and figuring out what to do then.

------
ef4
> They don’t tell you that a lot of programming skill is about developing a
> knack for asking the right questions on Google and knowing which code is
> best to copy-paste. And they don’t let you in on a big secret: that there is
> no mastery, there is no final level. The anxiety of feeling lost and stupid
> is not something you learn to conquer, but something you learn to live with.

Just because you haven't achieved mastery yet doesn't mean it doesn't exist.
It takes a very long time.

Until you've worked with masters, you may doubt they exist. But they do.

~~~
psyklic
I disagree with the author -- I never feel lost and stupid. There is always a
way of bringing an idea to life, even if there are compromises and tradeoffs.

But nowadays, I am forced to rely on third-party libraries. These libraries
often change constantly and have "in-development" nuances. So, the OP
regrettably is correct that searching the Internet is a requirement for
working on modern applications.

I do reminisce about the pre-Internet days, when all I needed was my brain and
a simple reference book!

~~~
woah
I bet the person who maintained your code felt lost and stupid though! The
benefit of libraries is that the reference exists at all.

~~~
psyklic
You assume that all libraries are bug-free and documented accurately! I assure
you that few are.

~~~
collyw
That depends. Use a well known library in Python or Perl, and they usually are
well documented and tested.

Now choose some obscure JavaScript library from Joe Random on github, and what
you say is probably true.

------
Balgair
I'll hijack here a bit (sorry).

A good friend of mine in in a PhD program at UCLA. She's into solid-state
physics and modeling. They use IgorPRO a lot in this field (oddly, also
audiology). However, she can't use it a lick. She tries, she really does, but
she just can't.

Why? Dyslexia. She has dyslexia. All the variables on the screen just look the
same. i++ and i--, or +i and 'hi', or for() and if(). Just the same stuff to
her. Its something not usually discussed, as I think most programmers don't
have it so bad. 'Up to 17% of the population'[0] may have some form of
dyslexia. It's something that really does impede many many people from just
reading, let alone coding and programming. Does anyone know of a work-around
for this at all? Thank you.

[0][http://dyslexiahelp.umich.edu/answers/faq](http://dyslexiahelp.umich.edu/answers/faq)

~~~
dethstar
This is perhaps more fitting in one of those QA sites or as an ask hn but i
did some googling for you:

[http://programmers.stackexchange.com/questions/9657/programm...](http://programmers.stackexchange.com/questions/9657/programming-
with-dyslexia)

~~~
Balgair
Thank you!

------
jimbokun
I have been programming a long time, and even now I often feel getting the
environment set up to start something than just writing the actual code to
solve the problem.

Compiler versions, dependency injection configuration files (why yes, I am a
Java developer, how did you guess?), build systems, source control, dependency
management, library incompatibilities, setting up a test environment, setting
up and configuring databases and web servers, etc.

Maybe I don't actually spend as much time on these things as it feels like I
do, but I do know futzing with this stuff when you just want to write real
code to solve real problems is soul sucking and demoralizing.

So I definitely relate to the hard part of programming, beginner or not, as
just getting to the point where you can actually write some code and see what
it does.

~~~
BorisMelnik
I really see your point on that. I am a hobbiest scripter, I know HTML/CSS,
dabble in PHP and Javascript and can read a lot of C.

I tried learning Ruby/Rails a while back and spent 3-4 hours just trying to
get the environment setup. I finally realized that Windows 7 was not a very
popular OS to learn Ruby on and gave up.

On the contrary, getting a PHP/Python/Javascript "environment" setup is no
problem. Notepad + a hosting account or any Linux/Mac and you are good to go.

------
ant_sz
Programing is easy for who has already learned it. The second language is
easier to learn than the first one. I think that's why programers keep telling
programing is easy.

I admit that the learning curve of programing is a little steep. But isn't
every skills in the world the same? Think about the first time a child learn
to walk, the first time a child learn to speak. No healthy adults think these
things hard to do now.

The conclusion: the programing is just like any skills in the world, they are
always hard for the new beginners but become easier and easier while you are
getting familiar with them. Saying if it is statically hard or not isn't an
accuracy statement.

------
andrewfong
To borrow from PG, treat learning to code like learning to paint (or any other
creative process). You might pick up the basics pretty quickly, but the
quality of your first webapp will probably be comparable to that of your first
self portrait.

------
felixrieseberg
There's merit in reminding people that a lot of development contains a decent
amount of Googling, but I'm not sure that "knowing which code is best to copy-
paste" is the main trait of coding.

What's certainly true is that learning how to code is dramatically easier than
it ever has been; and is likely to get easier as time passes. Learning how to
code is indeed pretty easy, knowing how to build a complex product goes beyond
that, though.

~~~
demallien
You know what? I don't think it _is_ easier to learn to program now. Many
years ago when I was a child and I got my first computer, it booted straight
into a BASIC interpreter. The computer also came with a manual that taught you
about if statements, for/next loops, gotos and gosubs. It showed you examples
of how to draw to the screen and get inputs.

Compare that to today. There was _nothing_ to install. It was all already
there. There wasn't even an environment to launch, you booted into the REPL.
You didn't have to hunt for tutorials on the internet, everything you needed
to get started was in the manual that came with the computer. And everything
in that manual was appropriate to the computer. You didn't have to worry about
having the wrong version of dev environment, making the tutorial incorrect.

That's not to say that programming hasn't improved in other respects. I could
spend years trying to build a basic TCP/IP stack on that old 8bit computer,
which already comes pre-installed on a modern computer. I can grab a free copy
of just about any language I've heard of. Huge numbers of libraries freely
available allow me to stand on the shoulders of giants. But, nothing available
today approaches the simplicity of that old 8 bit system for _learning_ to
program...

------
spain
I highly disagree. The author says one of the main reasons coding isn't easy
is because setting up the environment is so difficult. The problem is that if
you try and learn "iOS" using XCode then of course the environment has a lot
more weight and cause more issues that you really don't need to deal with as a
beginner. A better option would be to fire up a simple Scheme or Ruby
interpreter in a terminal and watch them go (after giving them a copy of your
favorite programming book). Heck, with things like CodeAcademy you can just
visit a website and eliminate the environment issue completely.

I'd say the problem with programming isn't that it's difficult, but that it's
intimidating. Writing a bunch of arcane symbols and words in a text file
scares people off, while really it's just everyday logic people use in a
different form (at least, the very basics are). I think that's also why
programmers keep telling people it's so easy, so that they get over that
irrational fear.

------
ef4
Also see Peter Norvig's "Teach Yourself Programming in Ten Years".

[http://norvig.com/21-days.html](http://norvig.com/21-days.html)

------
withdavidli
>And they don’t let you in on a big secret: that there is no mastery, there is
no final level. The anxiety of feeling lost and stupid is not something you
learn to conquer, but something you learn to live with.

One of the biggest surprises when I started to learn, LANGUAGES ARE STILL
BEING UPDATED. ?_? Totally thought that was done and over with, then I come to
find language/framework updates can break entire programs. First time learning
Rails was when they just upgraded to 4.x and all the tutorials was in 3.x. Now
that was a "FUUUUU" moment.

P.S. I thought the pictures was done quite nicely ^.^

~~~
greenyoda
Not all languages ignore backward compatibility. There's Fortran code written
in the 1960s and C code written in the 1970s that will still compile correctly
with today's compilers, even though these languages have evolved continually
over the years.

------
fred_durst
I've been programming for maybe too long now, but likely not nearly as long as
the higher level advanced developers, but still the idea that people copy &
paste code from Google/SO is horrifying. You are really just going to work on
some real life project and just blindly copy some random crap you found online
without even knowing what it does completely? Yikes.

~~~
bowlofpetunias
Uhm, that's how I still learn new languages. Copy, paste, modify just to get
something done.

The modify part leads to more concrete questions, more Googling, more detailed
reading of docs, until at some point I'm engaged enough to go back to zero and
actually start learning the language from the basics.

(This doesn't work for those languages who's paradigm you first need to
understand before being able to do anything, but most languages allow for
hacking straightforward procedural code at the basic level.)

~~~
fred_durst
I mean this in the best way possible, but do you like actually take your mouse
over to the webpage, highlight the code, copy it, and then paste it into your
editor? I am genuinely curious.

~~~
philmcc
Yes. I do this from time to time. Recent example, wasn't sure what the event
was called in JavaScript when the window changed. Couldn't remember if it was
resize or windowResize or whatever.

SE had a sample dummy event listener add function, complete with // do stuff
here. I cut and paste the whole thing and added what I needed.

I suppose I could've retyped the addEventListener function from scratch
but...I dunno, that seemed inefficient. I just needed the name.

------
jv22222
I've been coding PHP html css and JS for nearly 20 years and I still learn
huge swathes of new information and techniques all the time. I wouldn't say
I've mastered it. I'm pretty good at foreach though.

------
gcv
This is misleading. Learning to "code" or do the work horrifically called
"software engineering" is definitely a huge pain in the ass. It's all about
half-working fragile dependencies and outdated documentation. Don't do web
programming. Don't do iOS. You can try it after you have used good tools
first.

Instead, start by learning about computational processes. Use Racket — it's a
stable, excellent environment. Read SICP or at least HtDP. You'll have fun.
It's challenging, because it requires an adjustment to the way you think, but
it is not particularly hard.

~~~
rimantas
Oh, do iOS. You will know how elegant APIs look like.

------
sal1800
With programming, art, carpentry and many other things, you just have to
accept that the first project you finish will likely not be very good and the
best thing to do is to throw it away and start over.

If you can embrace that idea, you can eventually learn to code.

The goal is to understand what you are doing and why, not just blindly copy
and paste code that seems to work. Break it by changing something and fix it
enough times and you will gain insight about how it all goes together.

Even the most complex problems can be made easy if you can break it into
smaller tasks and build up to the finish.

------
analog31
>>> One of the most dangerous things I’ve seen happen to people who are just
starting to code is being told that it’s easy.

I've encouraged my kids to learn programming. The one thing I haven't done is
tell them it's easy. Anyway, they've seen me in bug hell, so they're under no
illusions. But they're no strangers to learning hard things.

>>> And they don’t let you in on a big secret: that there is no mastery, there
is no final level. The anxiety of feeling lost and stupid is not something you
learn to conquer, but something you learn to live with.

Yes! Bring it on! Bright kids spend their entire school day at the final level
-- 99th percentile on every possible measure. Those kids would benefit from an
extracurricular activity with no final level (traditionally, "classical"
music) that they can pursue at their own pace.

>>> They don’t tell you that a lot of programming skill is about developing a
knack for asking the right questions on Google and knowing which code is best
to copy-paste.

In my view, that's a general skill in its own right, worthy of learning. I
fixed my refrigerator and clothes dryer that way. I rarely tackle any
technical task without first seeing if somebody has blogged a tutorial. And I
grew up fixing things before the Internet age. But I'd start kids on coding
without the Google Everything approach.

>>> [the anxiety / boredom graph]

I enjoyed that. It does seem to ring true.

------
collyw
Depends on what you want to do.

I see lots of bioinformaticians writing simple scripts usually just counting
stuff up, and doing some stats. It needs to run once, on one machine and often
only on one dataset.

That type of programming is easy.

I am working for a sequencing centre, doing the database to run the place. I
inherited a self taught bioinformaticians code after she had left. Second
worst code I have ever seen (the worst was also a self taught
bioinformatician, who didn't even indent stuff). The code was so bad, I had to
refactor it just to debug it. The team leader didn't see a problem. It had
worked. He didn't see the fact that it would have taken me a day or two to
write this from scratch, if I had had an original specification, rather than
spending a week to refactor her code until it worked. To this day, I have no
idea what parts of the code are doing (I can see it is reading byte 8 of a
binary file and doing something. I have no idea what the contents of that file
are). At least now I have made the code modular so I can see the output of
reading the file into a huge nested dictionary.

Learning to code is easy. Learning to code well is not. Hell we can't even
decide what coding "well" means. 100% test coverage? Shit that works?
Something that is readable and maintainable? Something that runs faster than
all the equivalent software? In the end I think experience will mean a
developer can work out which of these is most important. Maybe just getting
something that works is what is important, and the example I gave above is
perfectly acceptable code.

~~~
JoeAltmaier
There are so many, many categories of program that its futile to say what it
means any more. Expertise in any category doesn't mean squat about anything
else.

I've spent a lot of time doing embedded stuff. Totally different world. What
matters here is irrelevant elsewhere.

So any time someone says "I can program" you have to ask "Where? With what
tools? For what audience?" and so on. Because there are so many niches (and so
many being invented every week) its impossible to guess.

------
sirdogealot
I only tell my friends that programming is simple as a way to encourage them
to get started.

Once they have begun, I tell them "sure, basic programming is simple, but you
need to think hard about what you really want to do".

That generally has a good outcome and they continue to be interested in
programming and wanting to learn more about it.

If you tell an interested person straight away that "it is incredibly
difficult" then you will be discouraging a large number of people before they
even begin.

------
wturner
At the college I use to work at they had a sound arts program and they still
do. They decided to change this a bit and make a foray into the 'cool' world
of programming. Instead of hiring software engineers to design the course they
let the previous "sound recording" course directors and a few lab instructors
attempt to write the program . All 4 or so of those people had never done any
real programming with the exception of one, who as far as I know has never
been in a professional programming or software development environment. In
short he did some SuperCollider stuff as a personal hobby and was good at
teaching MaxMSP. However, this is a different beast than teaching python or
IOS which is what they intended. Especially at it pertains to audio.

Eventually they wrote a course that included Python.

I assume the instructors realized what they had bitten off as last I looked
Python is no longer on the official curriculum. This story actually gets much
worse as they wanted to do Objective C but they originally hired a former
instructor who was a DJ to learn and teach it. That guy didn't show up for
work one day ..... and never did again.

------
erikb
Although the basic assumption by the author seems to be correct, the author
himself is not very far in his journey to become a programming master. I now
study and work in programming for about 7 years. About 3 years into
programming I thought the same way as the author: Tutorials and copy&paste.

If you reach a certain level tutorials become a waste of time, because you
don't need structural help any more. You also understand that you shouldn't
google how to implement a specific solution in the language of choice but
which solution in that language solves the given problem. You also don't
copy&paste because just solving a single problem is not the question any more.
You can already solve most problems. It's more that the desire to improve
leads to learning new principles, which means hand-copying small code examples
(sometimes from actual programs not from SO questions) and playing with them
until you get a feel for it and then start to use it in your daily programming
tasks.

------
deadghost
When I see "programming is easy" I think "dirty, filthy lies!" When people say
everyone should know how to program I think "why?" There's some weird nerd
myopia going on with the programming literacy movement.

Programming takes an odd kind of thinking and is about as easy as anything
else that takes a large amount of time and effort (read not easy).

------
klunger
This is a topic I have been thinking about a lot lately, so this article is
quite timely.

I was a bad programmer for a long time. For a few years, I was an engineer and
basically wrote quick and dirty matlab or python scripts to do physics based
modeling and simulations. But, it was never elegant or efficient or anything
that I guess you learn about in upper level CS courses.

It didn't have to be. A customer would never see the code, it would never have
to perform under critical conditions, it could almost never be reused because
each project data set was completely different. The code was just supposed to
crunch input and produce meaningful output that could be analyzed.

I got to thinking that I was a pretty good programmer because I could write
those scripts.

Then I quit that job and moved to a different country. The only job here that
I managed to get was as a software engineer. Here, I learned how very wrong I
was. Writing quick and dirty scripts that crunch data is easy. Programming is
hard. Really really hard.

------
armada651
The kind of brain necessary for programming is the one that sees something it
doesn't understand and then does everything it can to learn what it didn't
understand.

The real reward in programming is clearly seeing how much your understanding
has grown. But at the same time you're humbled by how much you have yet to
learn.

------
oldspiceman
The only useful class I took in university was first year programming.

I felt like god when I first wrote an output stream to a file. I couldn't
believe it was possible. Most people didn't have those kind of feelings. I
think that's the difference. You're either captivated or you're not.

~~~
_random_
Then you read some science fiction and futurology forecasts and understand
that there is no way future isn't going to be revolving around programming in
every way. And you feel even better.

------
marincounty
I found the free cs50 courses at Harvard helpful. I honestly didn't have the
patience to sit through the videos, but I listened to the mp3's while
exercising. All the buzz words started to make sense. I don't think I'll ever
become a Programmer--just don't have the drive, but I can put up websites--
half ass, but they are improving. Yea, I know a bit about ROR, and Django, but
would never call myself a Programer, or a cutesy Coder. In terms of making a
living in this field, I honetly think who you knows matters more than what you
know? I guess that's the case in a lot of fields? I've never had the stomach
to suck up to someone I didn't truely like. I guess you have too though?

~~~
jimbokun
I really feel like, relative to many other fields, programmers sincerely their
field to be a meritocracy. They don't always live up to the ideal. For
example, a lot of programming interviews used to heavily feature mathematical
riddles and brain teasers. More recently this has come to be considered a bad
way to evaluate potential programmers, but at least the intent was trying to
find out something about the candidate's intelligence, and not just trying to
make a personality fit or something.

------
brettgoulder
If you are considering a career as a web engineer, I think the first thing you
need to ask yourself, do you enjoy tying and untying knots over and over
again. If you do, you probably have the right stuff to be a really good
programmer.

~~~
anishkothari
I've also heard web programming described as plumbing.

I wish I knew this before I started my Master's degree in IT. Programming is
frustrating if you don't have an engineering background... you keep running
into new problems and people telling you what you could do better.

~~~
PurplePanda
I would never describe either finding new problems or people telling me what I
could do better as frustrating! They are both some of my favourite things to
experience!

------
gremlinsinc
My learning has progressed from one area to the next--each person learns
differently, and coding can be easy to learn, but like everything else it's
difficult to master. I started out on google, pulling snippets/coaxing them to
do my will, then I became good at reading docs -- and implementing straight
from the docs, for instance in Laravel/Rails apps.

The next big change for me was going beyond the docs to the actual API to do
even more customization, and override existing methods. It's a progression
from low-level understanding to higher, and whatever gets you there - just
don't give up.

------
drakaal
Coding is easy. The problem is too many "teachers" expect you to have a larger
vocabulary than you need.

I taught 3rd graders to code. I also taught 1st graders, but the 3rd graders
it really clicked. They would come up with solutions to things I would not
have thought were possible given the limited language we were working in.

We started in "Project Europa" it is object oriented, module based, and the
vocabulary is very limited. But students built all sorts of virtual robots to
do all sorts of interesting things.

When I learned to code I learned in RPG, and that doesn't stand for Role
Playing Game. Then I moved on to Basic. Turbo Basic, and later QBasic. I wrote
a 3D boxing game in QBasic. Yes. 3D graphics from QBasic.

To this day my vocabulary in any programming language is pretty limited. Those
around me get upset because I'll use a While loop and increment a counter
rather than a For loop and the Index of the thing I am looping through. It is
not that I don't want to use the wider vocabulary, or that I have anything
against Lambda's. I don't dislike Tuples. I have nothing against using a
Class. But I don't usually need more than my 12 word vocabulary to build
things. If I do, that is a performance optimization. What? Itertools and
product will do the same thing I did with nested For Loops? So? I didn't know
there was an itertools. I didn't know there was a product.

Someone said you need to develop a knack for asking the right question of
google... Nah, sure StackOverflow has 90% of the answers you'd ever need to
know, and they have a clever code snippet that I will admit comes in handy,
but if you have to break thought to Google, you aren't breathing the code. It
is like trying to learn Spanish by carrying the pocket guide with you rather
than making do with the 12 words you know until you can learn 6 more, and then
12 more then 24 more words.

Take the training wheels off and suck it up. Machines are big and fast, large
vocabularies are for people who want to speak concisely. A 3rd grader may not
use the best choice of words, but he can still explain to you how to make a
peanut butter sandwich, or build something in mine craft.

So don't let anyone tell you Programming is hard. Programming is easy. But
there are a lot of ass hats who care if you should have built a function
rather than copy and pasting the same code with minor variations 20 times. Or
will say "you could have done that in one line with a lamba and a reciprocal
function"

"Yeah, and Einstein had someone else do most of the math for his proofs
because he kind of sucked at calculus. I'll get to optimizations after I have
something that runs."

~~~
eropple
_> But there are a lot of ass hats who care if you should have built a
function rather than copy and pasting the same code with minor variations 20
times._

That larger vocabulary you sneer at is much of what allows developers to be
multiplicatively productive, allows them to do much more work and do it in a
faster and less error-prone way.

Or, put another way: are they having to maintain your code when you get tired
of it and move on _or_ are they having to deal with second-order effects from
your code being more brittle, less flexible, and slower to work on? 'Cause if
so, they're not the asshat.

~~~
R_Edward
I looked at the nightly order-processing workflow for the regional retailer I
worked for one time. I was gobsmacked to find that one section of it consisted
of launching the same suite of 5-6 programs one time for each of our 25
locations. And "launching" meant setting a handful of run-time variables,
executing the object, waiting for it to finish running, and examining the
result.

It was fairly easy to see why this happened. That workflow was the heart and
soul of the company's revenue processing, and no one wanted to touch it any
more than absolutely necessary, to avoid breaking anything. So when they
expanded from one warehouse to two, it made more sense to simply re-iterate
the existing code with the new location id. When they added another location,
re-iterate it again, and so forth.

I created a Launch subroutine, then replaced all those hundreds of lines of
code with a for loop that simply called the Launch subroutine for each object
needed. Then I went through the rest of the workflow and swapped in Launch
calls where appropriate. Overnight, that workflow became much shorter, more
readable, and most importantly, significantly more maintainable. Previously,
if you wanted to change what programs were run per branch, you had to insert
the launching logic in twenty-five separate spots. Now? Once.

 _That,_ my friends, is why we build functions, rather than copypasta-ing the
same code over and over.

------
the_duck
"The anxiety of feeling lost and stupid is not something you learn to conquer,
but something you learn to live with."

I started practicing mindfulness meditation a few years ago. Mindfulness
trains you to experience your emotions without judging them; in other words,
it helps you to "live with" feelings like frustration and anxiety without
getting overwhelmed by them. It's been an invaluable addition to my
programming toolkit.

------
Bizknacker
Though I'm a novice C++ programmer (working with templates at the moment), the
only time I'd ever felt lost and stupid, which was just recently, was when it
came time to write the end-of-chapter program in the book I'm reading.

Oddly enough, the program wasn't difficult to understand. I've even written it
and got it to run before! I think what happened this time around, is I had
read the chapter again, started writing more notes and had a better grasp on
the material than before, that when it came time to bring all the concepts
together, the example program didn't include them! For the first time in
years, I actually felt stupid, borderline retarded (in the literal sense).

The example involved an abstract base class, Dragon, with 3 derived classes.
The idea was to have a player fight a randomly selected dragon via Base class
array and Base class pointer. At this point in the book, aggregation was
discussed and shown in an earlier example, but wasn't implemented in the
example. Mind you, no player class was created! So basically, arguments were
passed to xDragon's defend and attack member functions via variables within
the main function.

So I'd decided to create a Player class instead, and have the Player And
Dragon objects interact with each other in the main function. Problem was, I
hadn't learned enough to know how to do that, to which I didn't realize until
error after error and trying desperately to get it running. I'd refrained from
using Google and Stack Overflow for the most part, save for a few compiler
errors I'd never received.

In the end, I'd decided to create a Game class that layered a Player and
Dragon object. I had a feeling I should have written it that way from the
start, but felt uncertain. The last errors that I was stuck on for a few days,
I'd solved by way of "I wonder if this will help" lol.

Up until then, I wasn't aware that if you don't have a separate implementation
file for a class, and should you decide to layer an object from that class,
the class must be defined within the class declaration. Having defined member
functions outside of the declaration, although within the header file, gave
me: include\BlackDragon.h|22|multiple definition of
`BlackDragon::calcDamage(short)', first defined here.

I will admit, it did put a damper on me. I felt like I was on a roll up until
that. Perhaps I'll take a week or two break from programming get the feeling
back again.

------
zhaphod
There is an enormous difference between writing in English and writing like
Shakespeare, Hitchens, Rushdie, or Stephen King. When it comes to coding most
people confuse learning syntax with writing great software.

------
vezzy-fnord
_They don’t tell you that a lot of programming skill is about developing a
knack for asking the right questions on Google and knowing which code is best
to copy-paste._

And this is how the security industry makes its living.

------
yuribit
"The anxiety of feeling lost and stupid is not something you learn to conquer,
but something you learn to live with"

That's exactly my daily felling, but I'm just a junior soft eng

------
snambi
A lot of coding today is "integration". This is where the code snippets and
tutorials come into play. Imho, coding is probably less than 20% of
development.

------
Uncompetative
Processing.js

[http://sketchpad.cc/h3QngEM9Vu](http://sketchpad.cc/h3QngEM9Vu)

------
ankurdhama
Learning to Code is really really easy. Learning to create something useful by
code is the hard one.

------
krisgenre
Learning to code is actually easy. What's difficult is, to master it.

~~~
greenyoda
Exactly. To expand on what you said:

Learning to code is easy, just as learning to write English prose is easy -
kids routinely do both of these things. However, learning to be a professional
software developer or a commercially successful novelist or journalist is very
different from learning to code or learning to write - for most people, it
requires hard work, many years of experience and learning from lots of
mistakes.

~~~
R_Edward
I would further refine this to, "Learning to code is like learning to write
prose: Easy to learn, and easy to do, but not so easy to do _well._ Especially
since 'well' is at least a little bit subjective." There are plenty of people
who can write well, who are not commercially successful. And there are people
who are commercially successful who do not write very well at all. Cough-
DanBrown-Cough.

------
pekk
It is easy. It just takes years and years to become any good.

------
ulisesrmzroche
With strong tests, who cares about copy-paste though?

------
octonion
Coding is easy.

~~~
illicium
But software engineering is hard.

------
_RPM
" As a programmer, there is a limitless amount of stuff to learn"

I absolutely disagree with this. I learn new things at least once a week about
computer science in general. No one knows everything.

"They don’t tell you that a lot of programming skill is about developing a
knack for asking the right questions on Google"

So, she relies on S.O. for all her programming problems, what if other people
don't? SO is _not_ my first choice anymore. Man pages are such high quality.

~~~
yen223
"As a programmer, there is a limitless amount of stuff to learn"

"I learn new things at least once a week about computer science in general. No
one knows everything."

How do these statements contradict each other?

~~~
_RPM
I'm not sure what you mean, but I am saying that there is not a limit to what
you can learn, as programmer.

~~~
yuliyp
... which is exactly what "limitless" means

