

The Ugly Side of Learning to Code - tweiss
http://www.crowdcademy.com/blog/#business-guy-to-programmer

======
steve8918
I took this entire year off to learn new things, like web programming, etc. I
have around 20 years of programming experience, with a background in C/C++, so
I had a very significant advantage over the writer of the article in terms of
getting started in that direction.

But I did come across similar things that the writer talked about. I first
went about it by choosing Python/WebPy as my backend, and then switching to
Wordpress as a front end for my website because I got tired of having to do
every single little thing, and subsequently learning PHP. Then I started
focusing on Javascript, jQuery and AJAX. My website is hosted on EC2, so I
needed to understand how that all worked (not nearly as difficult). Then I
tried learning how to make a Facebook app, so that ended up taking a few
weeks, since the documentation is amongst the worst I've ever encountered in
my career. I needed to figure out how nginx worked in order to get certain
things working, and I also needed to learn the basics of Photoshop and
Illustrator and basic graphics techniques. Luckily I have several friends in
design that helped me get over this hump.

These last 8 months haven't felt like an exercise in learning how to program
more so than 8 months of constant problem solving. Sure, I learned a bunch of
new technologies, but my main goal was to get up some web-based projects, and
every step of the way I encountered problem after problem, and my job was to
solve these problems by any means necessary. Solving these problems entailed
me having to learn Javascript, jQuery, Photoshop, Illustrator, etc. I didn't
relish the idea of having to keep learning new stuff, but I did it because I
knew it was the fastest way to solving my problems. I can't say I'm an expert
in any of the technologies above (I constantly get Javascript and Python
syntax mixed up in my head, and I google 80% of what I need), but I can solve
just about any problem that I've come across.

I think this is the key to bootstrap yourself and doing anything related to
technology, be it programming, sysdmining, etc. It's not so much the love of
constant learning, but rather not giving up in the face of constant
roadblocks, and constantly attack problems over and over and over and over
again until you solve them. Don't get me wrong, I've very much enjoyed
learning these technologies, especially Javascript which is a wonderful
language (despite its flaws), and so much more powerful that I ever thought.
But I know I've only started the scratch the surface.

As well, another big factor is keeping a high level of emotional energy in
order to keep pursuing your goals. One of the things I was working on was
using Tesseract to do OCR on uploaded image files. After 3 weeks of trying to
get it to work, I achieved about a 97% accuracy, but because of some
underlying bugs that I didn't understand, it wasn't good enough. I was
frustrated and disappointed and finally gave up on it, and moved onto my next
project, which I finished in about 2-3 weeks. But after that, with renewed
energy, I decided to give it one more go at my problem, and spent another week
at it. This time I used OpenCV in conjunction with Tesseract, and achieved
almost a 100% accuracy, but more importantly, I figured out a way to get
around the bug that had been dogging me on my first attempt.

I'm at the point now where I'm not a "great" web programmer, but I definitely
can take a design from one of my friends, and implement it, pretty much to
spec. I'm not fast, and I'm not creative, but I'm confident I can solve just
about any problem I need to in order to finish my task.

~~~
eel
This may be a bit tangential, but may I ask what led you to decide to learn
web programming? My background is in web programming, though I have much less
programming experience overall than you (~5 years). For me, I feel like
learning C/C++ would lead to increased understanding of general programming
and better career opportunities. It seems to me that C/C++ (C++ in particular)
is still relevant, and is becoming even more relevant.

And by learning C/C++, I mean really learning C/C++, not just relying the
three classes that I took in college that used one of them. Lately I've been
working on a C++ Windows TFTP server which has caused me to learn TFTP (very
simple) and WinSock (complex so far). So I'm just curious what your thoughts
might be.

~~~
steve8918
To be honest, I first started out trying to learn iPhone programming, simply
out of interest. Unfortunately I got caught in between the transition between
Xcode 3 and Xcode 4, where the interfaces and some of the terminology changed
and the books were all based on Xcode 3. It got frustrating and tedious trying
to convert concepts from Xcode 3 to 4 and back, so I decided to jump to web
programming, since I envisioned the back-end of many iPhone apps would be web-
based, with the goal of returning back to iPhone programming. During that
time, I made some pretty good progress with the web stuff, and it was pretty
enjoyable so I just stuck with it. Pretty soon, I'll get back to learning
iPhone programming.

Personally I think C/C++ is still relevant, and it's my language of choice,
but I'm not close-minded about it. For example, in developing my OCR
functionality, I discovered how wonderful Python was, because it was a sane
programming language, and allowed for much quicker development and progress
than C++. I'm now a Python convert, although I still have many more miles to
travel before I can become a competent Python programmer. In addition,
Javascript is a lot more powerful that I imagined, and it looks like a lot of
people are turning Javascript into something a lot more powerful, ex. Node.js.
If I had to put my money behind the languages that might really blow up in the
near future, it's Javascript and Python.

As to the career opportunities of C++, I can't really speak for that because
trends change quickly. The key is to be flexible and open-minded, and not get
stuck in a particular pigeonhole otherwise you'll find yourself like COBOL
programmers in the late 90s. You will definitely learn a lot by going the C++
route, and being "closer to the metal" as some people say, you can and will
learn a lot of different concepts that aren't available to many other
languages, like memory-management, etc. It might make it easier to take up
other languages in the future, as well, so it's not something I would
discourage anyone from learning.

------
jorgeleo
"Coding uses a lot of thinking patterns that I hadn't really used since my
math and statistics classes in college, and even back then not in this
intensity"

And

"I guess my point is, that if you want to become a programmer, you have to be
comfortable with having to learn new things constantly for the rest of your
life."

So many conversations around "but I want to be a programmer, do I really need
to learn math? Really, really?"

Yes, you do. But more disturbing than the resistance to learn math is the
resistance to learn. Period.

What i like about the article is that, all though the writter admits there are
some challenges, he does not whine about them, but instead he overcome them.
Because of that, he has a good chance at succeeding in programming, or
anything else for that matter.

Maybe not in 6 months... But he will get there

~~~
tzs
What math do you think one needs to learn to be a programmer?

To be a good programmer, you need to _think_ in a somewhat mathematical way at
times, but you almost never actually need to know math beyond the elementary
school or early high school level.

There's was an interesting essay in the Notices of the AMS a couple years ago
called "What is Mathematics For?" that explored the widespread belief that
high school math is an important job skill. The conclusion was that it isn't
for most people. However, learning high school math teaches reasoning, and
that IS an important skill--so even though most people won't have any use for
the math, math classes are important. Here's the essay:
<http://www.ams.org/notices/201005/rtx100500608p.pdf>

I think the same applies for programming. You need to be able to reason, and
learning some math is probably the best way to pick up those reasoning skills.

~~~
varikin
I had a teacher in college that was discussing the math requirement for the
programming classes he taught. I was at this point past the classes being
discussed. His reasoning for wanting, I think Algebra 1, for Intro to
Programming (C++ at the time), was not because the actual math was used in the
class. He wanted, as you said, to ensure the students were capable of
mathematical reasoning.

~~~
oblique63
I think it would be interesting to see the same concept applied in the
reverse; i.e. have a programming requirement for math classes.

At my university, there's always an embarrassing number of Algebra 1 sections
under the math dept every semester (I'd even say that just the Algebra 1 & 2
offerings make up about 30-40% of their total sessions some semesters). And if
I hadn't seen some of my friends tutoring student's in those classes, I
wouldn't have really believed there was a necessity for so many sections, but
now I do.

People just seem to have a really hard time extracting the concept of
'thinking mathematically', from the act of doing math itself, and I'd say it's
because it is so abstract; once you go past basic money/counting scenarios,
the real life analogs start to break down for most people, and all they see is
numbers, symbols, and mysterious rules.

Programming on the other hand, while still pretty tough to grasp if you're new
to that way of thinking, seems like it might be a gentler intro to me. Not
only does it tend to have a culture of more intuitive naming schemes than
math, and have a faster feedback mechanism (i.e. a REPL/compiler checks your
code as opposed to a math teacher), it also makes modeling more real world
systems really easy early on (so people won't feel bounded to just money or
whatever as their anchor back to reality), especially if the course goes into
OOP at all before it's over.

------
rasmusrygaard
I think this post touches on an interesting point about web development (might
apply to other areas too, but the web seems particularly bad). A lot of things
appear to be easy (Rails, Django, Heroku, AWS, JQuery etc.), but the number of
different components you need to manage is still overwhelming. Furthermore,
you often end up having to develop a low-level understanding of problems that
someone else claimed to have solved for you. While this low-level knowledge is
useful, it does add significant amounts of complexity for beginners and people
who might not be committed as the hardcore full timers out there.

As we seem to push more and more for the "everybody should learn how to code"
mindset, I think there is a big opportunity for someone out there to combined
managed and protected environments with the ability to write your own code. I
don't know if the solution is unifying languages across front and back end or
a better set of abstractions, but I see way too many obstacles for 'simple'
coding (although the situation today is without a doubt better than ever), and
I imagine this is some of what the author of this post ran into.

~~~
danso
I wish that the learn-to-code movement had a greater emphasis on code as a
utility belt, rather than "here's how to make a social website!"

Web dev is exceedingly complex and involves a lot more memorization of arcane
things than does general purpose programming. Whereas for a non-technical
founder, the important thing to learn is how aspects of business and content
can be handled in modular, abstract ways (something that is apparent after
learning loops and methods).

Learn enough code to understand implications of such things as granularity of
data, taxonomy, and automation...if a novice can generate a static webpage
chart from mashing up multiple data sources, that is hugely useful

~~~
rasmusrygaard
It would be great if everybody saw code as a utility belt, but I imagine that
it would be unrealistic to expect people to develop those skills. When I think
about what kinds of tools I use in, say, home DIY projects, I tend to have a
decent understanding of a narrow part of the field but not a lot of knowledge
about the area in general. I know how to change a light bulb or a fuse or fix
a power strip, for instance, but I don't claim to know much about circuits in
general.

------
Futurebot
For some careers, particularly technical ones, "learning for life" /
autodidactism are no longer optional. You're required to keep up with all the
latest research, trends, tools, and a variety of other things that make you
current. Sure, having a solid foundation helps, but is no longer enough (I'd
argue it hasn't been enough for a long time.) You're required to learn every
day to keep up.

What some here (who I'd venture are more likely than the median person to be
autodidacts) may find surprising is that many people find the idea that you
have to "keep learning stuff after college" distasteful, even abhorrent. The
"go to college so you can get some job and then do what you 'REALLY' want with
your life" thing is vanishing quickly, and the level of competitiveness in
society (well, in America at least) is increasing.

The economic disparities this creates have been discussed at length, but the
social ones less so. The fact that some careers require non-stop learning for
these people means that in some ways school never ends, and the post-college,
"no more competition" sigh of relief never comes. To me this is neither good
nor bad, just inevitable at this point, but I think understanding the
perspective of those who can not or will not follow the self-learning-for-life
path is important. If nothing else, people here will know the reason that they
are so grumpy.

------
redCashion
I wish more business guys would try to learn programming, so well done sir.
But I do have a quibble with this statement:

> if you want to become a programmer, you have to be comfortable with having
> to learn new things constantly for the rest of your life".

In my experience, the quickest way to tell that someone is not cut out to be a
programmer is when they complain about the amount of continual learning that
is a requirement of the job. The only way you can become a great programmer is
if you LOVE learning new things, and the prospect of there being a great wide
expanse of things yet unlearned fills you with excitement instead of dread.

So I think beyond having to be comfortable with that process, it better be
something innately necessary to you or you will get burned out on this job.

~~~
tweiss
That's so true! I used to love to learn... I mean I had to learn Spanish in 6
months when I moved to Costa Rica for an internship. Plus I've read at least
two books per month for the last 3 years (business and psychology stuff). But
learning to code was a lot more exhausting because it's based on knowledge and
there's no room for bullshitting (unlike business ;)

~~~
jamesmcn
There's a big difference between the kind of "learning" that is absorbing a
lot of data (reading business books, studying chemistry, reading history) and
using that data to draw solid conclusions. The former is kind of fun, in the
same way that watching TV is fun. It can be mildly entertaining, and your role
in it is mostly passive. The latter is hard work, but yields a much better
high on success. I don't think the pleasure is due to the greater effort.
Instead, it seems to come from the awareness of the new vistas you've managed
to unlock.

Programming has elements of both kinds of learning. You need to learn the
rules of syntax. You need to understand the libraries you are using. There are
plenty of other basics that you need to know, but aren't particularly
satisfying to learn. But once you start solving problems, the experience is
very different. In your fist six months, everything is new. Your sense of
achievement is great. As your skills expand, more of your work is simply good
engineering. Unless you are constantly pushing the boundaries, your new
discoveries are more limited.

TL;DR: reading business books is comparable to studying programming libraries.
Successfully executing a business deal is more comparable to building a MVP.

------
flatline3
> _is it possible to become a decent programmer ..._

No.

> _... and build a MVP in just six months?_

Yes.

~~~
stinos
exactly. Thinking that you're a decent programmer after 6 months is nothing
but hubris, and shows you're still in the stage of not realising there is
much, much, much more to learn. Or his definition of 'decent' does not match
mine.

~~~
tweiss
The latter. I know a lot of great coders, and most of them set the bar for
"decent" very high. By decent I mean that you could actually write code to
solve most problems you come across. Is the code going to be less than
optimal? Of course. Most of the time it's even going to be pretty ugly code
(you should see my backend code for a case in point). I'm not being
presumptuous, I just have lower standards than most of you guys :)

~~~
jlarocco
Not trying to be mean, but it doesn't work that way. "Decent" is relative to
everybody else.

~~~
stan_rogers
Which actually sets the bar pretty darned low, when you think about it. With
only a little of the right sort of information, and a higher-than-normal give-
a-shit factor, it would be easy to get beyond the level of the vast majority
of 21-day wonders and cargo culters out there.

------
suriyawong
This article was good until it got ugly.

"As a result I've become more focused, more logical and smarter. But I've also
become more detached from everyday life and less fun to hang out with. I'm not
sure yet if the change is permanent, but I certainly hope that it can be
undone :)"

I agree that coding is a constant learning process. But to suggest that this
in some way makes you more detached from the world, and/or less fun to hang
out with is ridiculously biased. I would like to believe the opposite is true.
Programming and computer science in general have given me a sense of
appreciation for the world and nature's algorithms that I could not have
fathomed before. The social applications of strong logic and focus are
infinite. Choosing to learn how to learn, or learning to program, does not
mean you are choosing to become an introverted nerd or an extroverted
socialite. I've learned nothing is really black and white (binary) like that.

As an example of how being more focused and logic can help, consider the
scenario: You're talking with your girlfriend about who gets to be the
designated driver one night, and all of a sudden the extra back rub you gave
that one day three summers ago gets brought up as a bargaining chip in the
argument. Reminding yourself and the other party to think logically and focus
on the task at hand and not bring up things that are sure to spark dissension
helps reduce these digressions and tangents during conversation. I think it is
important that both parties in an argument at least can agree on what they're
arguing about, and also at least on the scope of the argument. Now, I'm not
just better at debate because of coding. My point here is that my life is
enriched because can overlook the little things a lot more than I used to. I
won't lecture my son for leaving his towel on the ground while it is wet when
we're on vacation, because I have the focus to keep in mind what really
matters: we're on vacation to relax and enjoy ourselves. This kind of easy-
going behavior takes consideration and patience, given my short temper. Both
consideration and patience are crucial to becoming at least a functioning
programmer. It is even more than just patience and consideration though that
are real life applications of traits strengthened through coding. When my
friends and I are joking around, we tend to just morph and change jokes in a
recursive manner to keep them interesting and to keep our lives exciting.

Being original is hard to do, and lots of original material is just old
material tweaked a little bit. Our friend's name was Diego during the first
iteration of his nick-name. Recursively and through several iterations, it
changed to Diegs (Dee-eggs). Which changed to D-eggs. Which when he was very
drunk became Grade D eggs. Which changed over time to just "Eggs." And you can
use your imagination to guess how many different ways you can make eggs, and I
can bet you almost all of them were used, and also used in conjunction
('fried, scrambled eggs') to address our friend, Diego.

Now, you sir, should not be convinced that learning to program makes you less
attached to the world, and less fun to hang out with. On the contrary, you
should embrace your powerful logic and focus and use it to enhance your life
experiences and your disposition rather than to detract from them.

------
jyu
Web development is definitely getting easier, but it's still not easy. I spent
a lot of my past 4 years doing conversion optimization and testing out
different marketing channels. So I was exposed to basic html/css/php/mysql.
But that didn't really prepare me for web development.

I'm about 4 months full time into web dev, and there's just so much that goes
into developing a web app. And then there's the team component. And then the
web app needs to scale. Ruby, Rails, MySQL, MongoDB, Javascript, how to set up
the hosting, software design best practices, debugging, etc. If I didn't have
a mentor or peers help me through this I seriously don't know long it'd take
to figure out all the different pieces and how they fit.

------
TYPE_FASTER
"I guess my point is, that if you want to become a programmer, you have to be
comfortable with having to learn new things constantly for the rest of your
life."

I think that applies to anything, if you want to have any measure of success,
especially these days.

"So the lesson I've learned is that - even though I like coding - I enjoy
building products even more."

Yeah, never say that to a developer.

------
skylan_q
"As a result I've become more focused, more logical and smarter. But I've also
become more detached from everyday life and less fun to hang out with. I'm not
sure yet if the change is permanent, but I certainly hope that it can be
undone :)"

6 months away from programming, and you'll be fine :)

~~~
richardlblair
When I was in high school and just starting out I felt that I was becoming
detached, and I hated it so much. At some point, however, I decided that I
didn't really care if I was becoming more detached and less fun to hang out
with. It was more like I had redefined fun, and I eventually found new friends
that fell within this definition. There is definitely a change though, and I
don't blame the author for feeling uncomfortable. You either learn to accept
it or you walk away. The choice is yours.

------
samirageb
This article was pretty interesting to read, but unfortunately drew one
incorrect conclusion...

"I guess my point is, that if you want to become a programmer, you have to be
comfortable with having to learn new things constantly for the rest of your
life."

This conclusion implies the rate of learning experienced in those 6 months
would be the same forever, and I think that's not entirely realistic. While
technology is rapidly changing, it's FAR more sustainable to maintain
knowledge across a wide variety of areas than continue at the pace and breadth
the OP experienced.

Also, it depends on your field/focus. If you're talking about web programming,
sure. If you're a C++ app programmer, chances are your world isn't changing
too dramatically each year.

------
tweiss
Sorry guys if you get a server error page, seems like my heroku dev postgres
can't handle ANY traffic. I haven't implemented connection pooling yet and I
run out of db connections way to quickly ... will try to fix it or set up my
own db!

~~~
stiletto
Well it sounds like you're still learning which is a testament to your
article. Well done and keep it up!

------
berodam
This article hits really close to home. After graduating college and getting a
job in biotech I quickly realized that I don't want to spend next 30years in
front of a lab bench, dealing with FDA etc. so I have been learning to code.
starting with Django (i knew some Python beforehand) then I realized I need
some javascript, jQuery, git, MySQL. The only difference is that I love it.
Each technology provides something that blows my mind. My experiment started
in May and is going while I'm holding on to my lab job. By October I hope to
have a portfolio going, I have two apps ready. I really hope it will all pan
out.

------
amitparikh
> "I'll never become a good programmer, but I strive to be the most capable
> brogrammer I can be."

Being a competent programmer is a prerequisite to being a "brogrammer"
(whatever that means).

~~~
tweiss
Not necessarily if you want to be a brogrammer... watch the video, it from the
first twilio conference. it's hilarious! :)

------
Stefan_H
I have a real problem with this:

"I guess my point is, that if you want to become a programmer, you have to be
comfortable with having to learn new things constantly for the rest of your
life."

I really feel like this is the outlook everyone should take on life, not just
programmers. Maybe the causality ought to be switched; good programmers are
people who have a "learn something new every day" outlook on life. Hell, it
could even be said that good people in any field are those who take that
viewpoint on life.

------
victorhn
I always thought that "less fun to hang out with" people were attracted to
programming, as it requires more solitude and attention to detail thinking,
and now you are saying that even "normal" people seems to get this kind of
mindset after some time.

Maybe i should quit programming some time to see if i can reverse to a more
social style of thought.

~~~
kernelPanicked
I'm too deep in the coder lifestyle these days to say what it is like on the
other side, but as an former serious music student, I can offer an analogue.

Anybody who has learned music and studied it seriously can tell you it colors
the way you hear all music. When I was deep in it, pop music was intolerable.
I liked rock, don't get me wrong, but it was all art/hipster stuff. Before
you're "enlightened" with musical performance and theory, music just kind of
"washes" over you. You get a beat and a mood but you're not taking it apart.
After such "enlightenment," you'll hear it all in terms of time signatures,
keys & changes, scales & modes, references, cliches & conventions, etc. Much
like being a coder, it is a beautiful, cursed understanding. I'm now fully a
decade into "recovery" from thinking I was a musician, and I will tell you I
really like not having to think so damn much about my music.

So, if that is at all similar (and I think it is; btw, lawyers are another
class of geek that have similar problems to programmers and musicians)...yes,
it can get better! :)

------
daguar
The difference between a business person and a programmer: an intrinsic love
of learning new things.

Programmers make better entrepreneurs because (shock) loving the act of
learning new things as an end in and of itself makes you way, way better at
it.

------
stephengillie
When I'm with friends, I'll get caught up in how a service, site, or app is
assembled (i.e. interfaces, wrappers, cloud server connections, etc), and take
a conversation with friends off on a tangent they aren't interested in.

------
rizwan
tweiss, by actually building the full-stack (front-end to back-end and
deployment/ops), you've compressed the "out-of-comfort-zone" feeling all
programmers eventually face from years to a few months. Bravo!

------
guscost
Code is a messy experience.

