
Please don't denigrate what a beginner is currently learning - danso
http://pgbovine.net/programmers-talking-to-beginners.htm
======
antirez
Most programmers my age (I'm 37) started with BASIC. We should all be terrible
if the language you start with would be so fundamental. The only thing that
matters is actually _to start_ with something, and _to improve_ over time.

~~~
analog31
I'm 50, and started with BASIC on a mainframe timeshare system. The following
Dijkstra quote is proudly displayed on my cube wall:

"It is practically impossible to teach good programming to students that have
had a prior exposure to BASIC: as potential programmers they are mentally
mutilated beyond hope of regeneration."

I would actually go a step further with the thread title: Please don't try to
teach if you can't.

When I talk to junior (or senior) folks who are learning to program, it will
become evident that I've chosen different tools than what they're learning. So
the discussion of tool choice is inevitable, especially if I have to admit
that I don't know the language they're learning. My typical advice is to
choose something that is presented with good learning tools, and maybe one
that has tutorials related to a subject matter that they're interested in.

~~~
enlightenedfool
After 14 years of java programming which was really the language I started
with, I can say that quote applies to java and perhaps any language that's not
assembly, C, C++. I think every beginner should be strongly encouraged to
start with C.

~~~
luikore
To start with assembly is great if one wants to learn programming instead of
building websites.

------
brandonhsiao
What made, say, PHP or Visual Basic good for beginners was that they _just
worked._ You wrote a PHP program (in the language, not a framework), saved it
as index.php and suddenly you had a working web app. With VB6, you created a
project, dragged stuff onto a window, typed things, and suddenly you had a
program that looked just like the other programs you were running on your OS.
You didn't spend hours configuring things or typing boilerplate code.

The experienced programmer's goal is to make good stuff; the beginner's is to
get his feet wet. These are radically different goals with mostly randomly
different tools.

~~~
nkozyra
> What makes, say, PHP or Visual Basic good for beginners is that they just
> work.

And what makes them bad is they permit, induce or even explicitly teach bad
habits.

I agree to not discourage someone if they're doing it, but if you have a
chance to steer them in a position where they'll be better programmers, you
should do that.

The reality is almost any language allows you to create a single file and run
it and see a web page these days. That's not something unique to PHP at all.

~~~
jordanlev
> The reality is almost any language allows you to create a single file and
> run it and see a web page these days. That's not something unique to PHP at
> all.

This is not what the parent means. In PHP you get a crappy shared hosting
account, and copy a file up to the server via FTP and it works. This is not
possible with Python, Ruby, etc... you need to do more server setup in most
cases. Sure this is due to historical reasons and maybe not specific to "PHP
the language", but that is the situation that most beginners face. It's a very
simple mental model as well. Services like Heroku kinda/sorta make it simpler
for Ruby/Rails/etc., but understanding how those work and getting the command
line tools set up is mentally more complex to a beginner.

~~~
nkozyra
> This is not what the parent means.

Well let's be fair, it's what the parent says. Even so, that's a largely
outdated piece of "common knowledge" in 2014.

Five years ago? Sure. Today? Not as much.

~~~
jordanlev
Genuinely curious... can you explain to me how to get a single-file ruby or
python app up and running on a normal shared host (basically anything that
uses "CPanel" or "Plesk")?

With PHP: 1\. log in to server via FTP or CPanel "File Manager" 2\. find the
publicly-accessible document root (htdocs, public_html, etc) 3\. upload an
"index.php" file to that directory with "<?php echo 'hello world';" in it 4\.
visit [http://yoursite.com/](http://yoursite.com/)

How would I achieve this most-basic web page on a common shared host in ruby
or python?

~~~
briatparallels
Hi Jordan, I'd recommend the following. The Plesk hoster or VPS owner can
prepare the environment by himself. See:
[http://devblog.plesk.com/2014/09/plesk-and-ruby-on-
rails/](http://devblog.plesk.com/2014/09/plesk-and-ruby-on-rails/)
[http://devblog.plesk.com/2014/10/plesk-and-
django/](http://devblog.plesk.com/2014/10/plesk-and-django/) (full disclosure,
I work for Parallels & had our dev team take a look at this question.)

------
DigitalSea
This 100x. I am sick and tired of developers in the industry trying to push
their own preferences onto junior developers. I think many of us who have been
in the industry for a while have witnessed this scenario happen in the
workplace a few times in our careers.

Programming languages are like opinions, everyone has them and everyone is
always wrong. We all have to start somewhere, it shouldn't matter if you
decide to choose PHP or the new flavour of the week trend language on the HN
homepage. All that matters is getting your foot in the door, seeing the
possibilities of a programming language and then moving up.

I recall programming Visual Basic in high school, my first ever exposure to
programming. Not many would consider Visual Basic great, but it was enough for
me to get a taste of what is possible in programming and from there, I
consumed tonnes of books on different aspects of programming. Through my own
growing knowledge, I could see the limitations and downsides of various
languages the more I kept learning.

My first foray into web development was PHP and HTML. There is no other
language in existence that can rile up a crowd of elitist programmers faster
than PHP. But PHP was my gateway into languages like Python and Javascript
(especially Javascript). The more I learned, the more I could see similarities
between PHP and Javascript, and other languages like C++. It didn't matter I
chose what is considered a bad language for web development, it taught me
concepts that carried over to other languages, it taught me the basics of
things like if statements, for loops and more.

Fast forward to now, I have a firm grasp on HTML, CSS & Javascript, I know
Ruby, I know Python, I know Objective C and have a skillset that allows me to
pickup a new programming language non-objectively and play around with it,
without passing judgement or casting an opinion. Because I was able to make my
own decisions along the way and learn what I wanted to learn, not what someone
else thought was best to learn, I have a varied toolset and I am better off
for it.

We will start somewhere, I think some of us more than others lose sight of
that. We get clouded by our own judgement, everyone thinks their favourite
language and framework is better than the competition.

------
bronbron
Hm. While good advice, this seems like just general life advice not specific
to programming.

If you're the kind of person who says things like "TextMate is for n00bs" (or
some variation of such) you're probably just a super annoying person in
general.

------
ChicagoDave
I started coding in the 80's and many people would deride my expertise in
BASIC, whether it was on an IBM PC or on a DEC PDP-11 or DEC VAX. If you
weren't coding in C and later C++, you just weren't a "real" programmer.

So all I have to say is...one of my clients in 1991 is still running the
payroll reporting system I wrote....in Microsoft Professional Development
System...which was BASIC.

I've since learned OO, C, C#, scripting, and all the new stuff, but BASIC is
where I started.

~~~
seanmcdirmid
My first internship (circa 1995) had me writing an email support system for
IBM in...Lotus Notes Script. It was still alive and kicking in 2000 when I
checked back on it (given that OS/2 is no longer alive, I doubt it is now).

~~~
stan_rogers
No OS-related reason why it shouldn't be; Notes will run happily on Windows,
OS X and Linux. It may even have been webbified (not particularly difficult
from R5 onward, and really quite easy since Domino 8.x).

~~~
seanmcdirmid
The project was done for OS/2 device driver developer support, so I'm guessing
it is not around for that reason.

------
nkozyra
And let's be honest, there are two ways to go about steering someone to
another language that might put them in a better place as a programmer long-
term.

The first is the condescending, snooty version espoused in this blog. The
problem is, I don't think it actually happens that much. It may be perceived
that way, but people who are learning new things are sensitive to instruction
from people who know more.

The second is to be very supportive and maybe even a small sales pitch about
where you would start if you were beginning programming now in 2014, knowing
what you know as an experienced programmer.

If you truly believe that learning PHP as a first language is bad for a new
programmer, then you shouldn't bite your tongue. But you should be prepared to
explain why and present a good alternative and maybe even offer some hands-on
instruction.

~~~
asuffield
> If you truly believe that learning PHP as a first language is bad for a new
> programmer, then you shouldn't bite your tongue. But you should be prepared
> to explain why and present a good alternative and maybe even offer some
> hands-on instruction.

I routinely recommend python for this, and somewhat more aggressively to
people who are making php noises. Not because I'm a massive fan of python, but
because it has relatively little syntax and tends to fail in very obvious
ways, which is exactly what you want here. On rare occasions I'll offer some
direct tuition, but usually I just point people to
[http://learnpythonthehardway.org/book/](http://learnpythonthehardway.org/book/)
because it really works.

For the most part, it's not all that important where you start - I recommend
against people starting out with java or C++, but it's not a tragedy if they
do. However, PHP is an exception. I have seen too many new programmers latch
on to PHP because "it's easy", and it breaks them. They never manage to learn
any other language because "it's too hard to get going, and I can do
everything in PHP anyway"; they leave a trail of half-finished projects that
hit the 20,000-line wall and couldn't figure out how to get past it. Whenever
you try to introduce them to something else they just say "but it's hard, and
I don't see why it's useful". You can't teach them how to do software
engineering because PHP is too broken and the internet is full of terrible
advice about writing PHP code.

Learning PHP first makes it harder to learn your second language, not easier,
because of all the bad things you have to unlearn.

Yes, Facebook has a lot of PHP code. That's because they've made a business
decision that rewriting it all would cost more than developing highly
customised tools to make PHP somewhat manageable and then burning engineering
costs on managing it. That cost analysis is very unlikely to apply to anybody
else.

------
laurieg
Praise three times as much as you criticize. This is something I learnt when I
was a teacher. Being a teacher often involves telling people they are wrong,
and if you don't praise praise praise, they _will_ lose motivation.

Your buddy/child/partner is trying out some basic web design? "Hey cool color
choice! Show me how you change it from brilliant pink to light grey." Adjust
as appropriate.

The value of praise is undervalued in the hacker community. If you are really
searching for something to praise, praise effort and getting this far.

~~~
throwaway82374
I think the reason the hacker community doesn't bother with it is based on a
culture of efficiency. It isn't entirely out of order to assume that folks
have some other support system in their lives (family, social groups, etc) to
offer the praise they need to motivate them (or maybe even intrinsic
motivation is there in some).

------
untog
Yep. The first language I worked with for a good amount of time was VBA -
making Access forms more complex. Despite the language itself being terrible,
it was great - I could start with something I understood (forms) and slowly
build on that, making useful things all along the way. Then came VB.NET, then
C#, then, well, about everything else.

Where you start doesn't really matter at all.

------
OneLessThing
That's the thing about teaching, it depends on the student.

For example, I wish someone told me to stay away from php when I began
learning. My motivation was to become as effective as quickly as possible not
just a casual learner or hobbyist. I wanted to hear the harsh criticisms and
realities as quickly as possible because that's where the growth is. Of course
feedback should not "denigrate" the beginner as the title says but giving the
complicated, multifaceted truth early on may be desired rather than
compartmentalizing and simplifying the reality.

See work on "expertise" by Ericsson and Hoffman (and others) for support of my
argument.

------
wallflower
I really like this comment from an AskHN from jlcfly two weeks ago. I hope
most of us embrace this philosophy as the reality is programming as an art is
much more important than programming as a rote skill.

"Teach them to be better than you. That may seem counterproductive. I have a
type A personality, and I have decent coding skills. I've been in your
situation a number of times. I also know there's these mythical expert
developers out there that I can't seem to find (or afford). So, what to do? A
few years ago I realized that if I continue down this path, I'll end up with
some serious health issues due to the stresses that come along with having a
reputation for being a really good developer.

So, I decided that instead of searching for developers better than me, I would
teach developers I work with how to BE better. It's taken a lot of patience.
And it's taken me quite a bit to LET GO of my way of doing things. I had to
take my ego out of the picture. (VERY hard to do.)

Nowadays, I realize that developers don't have to BE better than me. I simply
have to ALLOW them to do what they do without being so obsessive about it.
Turns out, even junior developers really CAN do good work. They just need a
little guidance that only comes with experience, and then they need me to get
out of their way."

[https://news.ycombinator.com/item?id=8649415](https://news.ycombinator.com/item?id=8649415)

------
Aloha
I can't tell you how many times I've heard this, its demoralizing to be
basically treated like I'm using tinker toys, moreover I'll be trying to build
something in the shell, and told you should do that in perl/python/whatever,
because its better/faster/easier - then when I ask for help, as I dont know
those languages, I get told to go buy a book.

------
todd8
I find, that when talking to beginners, it's more common for the beginner to
already be heading off in a direction that will ultimately frustrate their
attempts to learn. Usually, this is due to their desire to skip right over the
whole beginners phase of learning to program. It's as if they say, well I
going to skip Driver's Ed and start with driving a Formula 1 car because it's
a faster car.

One friend said to me "Well, Python feels like such a grab bag of features,
it's too perplexing. I'm just going to start with C++ instead."

A Ph.D. student in Mechanical engineering was going to start developing a
simulation for his dissertation and was going to use C++. He had very little
programming background.

A friends bright 13 year old wanted to learn programming and told me that he
wanted to learn C++ because it was fast.

~~~
bbcbasic
Regarding the 13 year old when I was young I learned BBC Basic.

If I had to try and learn Assembler or C++ at 8 I would have been put off
programming for a few decades!

I could learn basic by copying and modifying listings in magazines.

~~~
ssully
To add a contrasting opinion I started off with C++ because I heard that's
what games were written in and I wanted to learn games. I picked up C++ Primer
in Junior year of high school, got some text printing to command line and was
fucking ecstatic. I eventually got stuck and had no one to really give me
guidance, but it did make me decide to pursue a degree in Computer Science
instead of English. Despite loving to write at the time, the brief exposure to
programming made to so damn curious that I felt completed to break out of my
comfort for writing and try something different.

------
PhasmaFelis
My supervisor at my last job, an old-school Unix guru, taught me one...well,
actually a bunch of very important things, but one of the most important was:
There is no shame in showing ignorance by asking questions. If someone is
trying to teach you something and you don't understand, tell them so. Don't
just nod quietly along. You'll never learn that way, and a good teacher will
respect your efforts to improve yourself.

The equally important corollary, which I didn't realize I'd learned until I
started my _current_ job, is: If someone _does_ try to shame you for asking
questions, it's they who should be ashamed, not you. That has helped me
immensely in the past few weeks. The current contract runs 'til the New Year,
and I don't think I will be coming back.

~~~
bostik
This chimes fairly well with my professional motto.

We learn from our mistakes. Mostly we learn how to make _different_ kinds of
mistakes. When the mistakes get truly esoteric, we are finally becoming good.

------
kodr
Agreed. you have to start somewhere. I started with GW Basic. I didn't have
access to a better compiler at the time, but I was able to do stuff. Later, a
friend gave me a Pascal compiler, then I learnt C/C++.

It's a lot easier nowaday, with internet and interpreted language in your
browser.

~~~
nmjohn
Oh man, this is the first time I've ever heard someone else reference GW
basic.

When I was 10 or so I convinced my parents to let me put the ibm 286, which
previously was sitting in their closet, in my bedroom. (At the time we had a
newer computer with windows 98, this would have been just before XP would be
released iirc)

GW basic on that 286 was where I taught myself the basics of programming. That
takes me back.

~~~
kodr
Nice :)

I had an even older computer, a Tandy 1000. I had to boot MS Dos 6.2 with a
5"1/4 floppy disk. GW Basic was kinda the only thing I could do. Later, my
father got me QBasic, which was nice since I didn't have to input each line
numbers :p

------
olalonde
Reminds me of Cunningham’s Law: "The best way to get the right answer on the
Internet is not to ask a question, it’s to post the wrong answer."

------
veeberz
Funny, the other day I was talking to someone about a project I was doing for
my Intro to Software Engineering class. We had to make a web application with
any tools we want, with the suggestion that we used Django or Rails. I chose
Rails. Anyways, when I mentioned "Rails" this guy gave me this incredulous
look and said "Rails? Use PHP."

I consider myself at an intermediate level (I guess by my own standards). I've
dabbled in PHP. But honestly, I like Rails. Obviously the appeal to it is ease
of use, and I'd definitely consider using it in my future projects. Though he
never explained why PHP is objectively better. I just thought of it as just
another tool to use, like Rails.

~~~
smileysteve
If you like rails, I'd stick with it. That means that you're already familiar
with the MVC model, and once you grasp that, Ruby and the Rails helpers are
easier to implement than PHP.

~ I've worked in Symfony 1.x, Laravel, and Ruby on Rails.

------
maknz
I'm a PHP developer (reasonably experienced, in my opinion anyway). The only
practical downside of PHP is the standard library is a bit iffy, because
breaking BC that much is a big deal. Many experienced developers prefer PHP,
it's not just a language for newbie web developers to get their feet wet in.

I think the reason you see a lot of terrible PHP code is because it has low
barriers to entry, a lot of inexperienced people who really aren't programmers
can jump in and build crap really easily. But there is _a lot_ of good PHP
code out there too.

------
logn
PHP is fine but it has problems:

[http://eev.ee/blog/2012/04/09/php-a-fractal-of-bad-
design/](http://eev.ee/blog/2012/04/09/php-a-fractal-of-bad-design/)

I'd say the same thing about C++. And I think newbies should be warned about
both of these languages.

That said I agree that the language doesn't really matter. I don't think
frameworks or libraries should matter for novices either. My only advice is to
do the problems at: [http://projecteuler.net/](http://projecteuler.net/)

------
OGiR
Glad to see this being said.

This last year I got fed up with mindlessly completing homework and studying
for Math and CS in school and started doing what I really want to do in my
spare time; building. I decided web development seemed cool and I used to
enjoy making silly little web pages a couple decades ago. It seemed natural to
me to familiarize myself with html first, so I wrote a page with just html.
The next thing for my spare time was a little site using just html and css so
I practice and familiarize myself with some css. Then I started playing with
js.

I did encounter the types of situations the article is describing constantly,
but I was sure of what I was doing and what I wanted to do so I did not let
them affect me. I was going to go whatever slow, awkward route toward web
development I wanted to take. I knew I could pick up a framework to code an
app, but for my own sake, I wanted to write the whole thing in php, including
coding basic CRUD functions for my mysql server and basically reinventing MVC
for my own project.

Nowadays I am playing with backbone consuming api calls from my restful django
server, and it is wonderful and very exciting, but I had to get there on my
own terms, and I am glad I did.

My advice to noobs like me is to play with what you understand, and enjoy the
journey, without worry about 'doing things right'.

~~~
kazagistar
It is far easier for the right way to "stick" if you can reference something
you did the wrong way beforehand while learning it. Learning Haskell recently
has helped me really understand this; finding the right way is difficult and
often not entirely intuitive at first, but once you try it out and work
through things the hard way, you gain the ability to appreciate what you were
missing.

------
ovatsug25
"Experience is the best master, but it always comes a little too late." \-
Cervantes

After loads of time hearing about proper CSS, RoR, etc. I ended up putting up
my first webpage by copy-pasting my structure from one page to the next. I
used grep, perl, sed, awk to change stuff across all my pages. It was pretty
obvious that it was inefficient to me, but I began to have a real appreciation
for the tools I eventually learned. I ended up learning why I needed to learn
RoR, Jekyll and what I for webpages now: Middleman.

Today, I actually end up use PHP on a day to day basis when before I used RoR,
Node, C#. I end up being just as effective in it, if not more. I actually
intend to write about functional PHP someday. PHP is also awesome because it
ends up being a history lesson: part of the reason RoR is so good is because
it had the time to learn from PHP's mistakes (mistakes which happened because
it was busy building the internet). My first app, btw, was constructed in
Excel.

We need to get dirty with our tools to learn how to use them or why they are
important. Let people make mistakes. Personally, I like to call it 'learn-by-
annealing'.

~~~
mb_72
The Clark Terry quote "Imitate, assimilate, innovate" might have been intended
for jazz musicians, but it's appropriate for any creative endeavour including
programming. Nobody gets to 'innovate' without spending a hell of a lot of
time in the other two stages first.

------
samstokes
I've done this inadvertently. Ironically, my intent was precisely to _avoid_
discouraging a beginner, but this article makes me realise I was, at best,
sending mixed messages.

I was helping somebody who was taking a Java course without a prior
programming background. Her course required her to submit assignments as Java
applets, and she was running into a lot of trouble getting applets to even run
on her laptop, due to Java version conflicts and browsers being much stricter
about applet security than they used to be.

I hated to see her getting discouraged by this pure incidental complexity -
this wasn't even a problem with the code! So I said something like "I'm not
sure why they're even teaching you applets, nobody uses them any more".

Of course what I meant was "they're making it harder than it needs to be and
programming is actually easier and more fun than this". But she may have heard
"you're spending all this effort learning something that's already out of
date" :(

------
hcarvalhoalves
... or you can skip talking about your favorite framework and point to theory
like logic, computational complexity, data structures, lambda calculus,
relational algebra, and other stuff that actually matters. He already took the
first step, which is playing around with some programming.

I have a friend and previous co-worker who hoped that by learning Python he
could work on a legacy system I built while we worked together. He's able to
make some tweaks and get a general idea of it, but translating intention to
algorithm is still mostly mystic to him. He was shocked after I showed how to
simplify some 30 lines of if clauses with a dict, he learned the syntax for a
dict but didn't really understood how it works, or to what it's good for. This
kind of illumination, I believe, only comes after learning some theory, not
syntax, or your favorite framework.

~~~
jerluc
Coming from a background of not much computer science and having dropped out
of college, I found learning theory to be too lengthy and dull for my novice
mindset at the time I started programming (in, quite fittingly,
HTML+CSS+JS+PHP on LAMP). I was in the same shoes as your friend, as whenever
I would see an open-source project or library, I would be quick to modify it
to suit my needs, but would end up with massive if clauses and without much
modularization. Of course, after about a year or so of doing this same bad
practice, I came to ask "Truly there must be a better way than this, right?"
It was at that point, after already becoming completely addicted to
programming (yes, in the ugly, somehow-working kind of way) that I gained
enough patience and interest to learn more theoretical concepts about computer
science and its applications to programming (lambda calculus and functional
programming in particular). I agree with you, being that this ultimately ended
up helping me greatly, but I disagree that CS theory should be the very first
thing a novice programmer approaches.

------
0942v8653
Most of the people I know who are starting out are starting on TI-BASIC. I
have to say, Beginner is already ahead by starting out with "some PHP and HTML
using TextMate on my Mac." It's at least better than starting out with some
Visual Basic using Notepad on my Windows.

------
Immortalin
I still prefer visual basic 6 as a tool for learning programming. It is simply
easier to Get Stuff Done(TM) on that language than any other. You don't have
to worry about things like OOB etc. when you are just learning to program. I
always fail to understand why people would gladly accept non-oob languages
such as Go but yet condemn vb6 for being a terrible language because it is
event-driven, too simple, no OOB etc. GUI creation is so easy, you don't have
to worry about gtk bindings etc. No need to bother to print out a single line
as a first program when you can skip directly to building a calculator app
with a few seconds of drag and dropping. Can't afford VS? Just fire up a
Microsoft office's macro editor and you are good to go.

------
bithush
I met up with somebody from the startup world last year for a coffee to chat
about things as I wanted to get some advice from somebody with a lot of
experience as a developer. It was a total waste of time though pretty much
because of what the author wrote about.

He was a nice enough guy but he knew I was new to development yet when I
didn't know about something he made me feel like I was an idiot and when I
asked questions about good places to start he shot down everything I suggested
as if only a moron would start there. It was very demoralising and it knocked
me back for a few months as it really made me think "I am not good enough to
do this". Very annoying how some people in the industry act like they are some
kind of demigod to programming.

~~~
alxndr
That's very unfortunate. I hope you can find someone more welcoming (and
hopefully who's also in a mentoring mood) to ask whatever you're curious
about. Off the top of my head I can't think of any conline communities which
would be particularly welcoming (though the general community around Ruby is
quite fond of saying how nice they are); do you have any friends or relatives
who write any code?

~~~
bithush
Unfortunately I do not have any close friends or family who know much about
computers at all however there are a lot of good people over on some of the
subreddits that are always happy to help out. The C and C++ subreddits are
particularly good.

------
j45
The re-surfacing behaviour of making others feel excluded for not sharing a
belief can't help but make me wonder if it's all that different from religious
zealotry in one's interpretations, preferences and opinions of how to solve a
problem being superior to others.

Users are usually far removed from the end solution enough that the choice in
framework or language rarely impacts their ability to use a web browser or
mobile interface without having to imagine what's under the hood.

It's not until we remember what we feel is current and appropriate today will
be just as outdated in a short time. Our work is to solve problems, not to
bash others into doing it one particular way.

------
Mandatum
Started off with AutoIt, then VB6, then PHP. Not the smartest route but today
I'm using Ruby, C#, SQL, F# and JS/frontend. All through the first few
languages I heard people bashing each and every one for various reasons..
However I built a range of tools at a young age including a file encrypter, a
website complete with authentication and user management, an online shop and a
game "bot".

If I hadn't mucked around the way I did, I don't think I'd have the breadth of
knowledge on networking, protocols, assembly, file formats and authentication
I do today. I probably wouldn't have gotten into security either.

------
droopyEyelids
Even this advice is aside from the point and a bad way to influence a
beginner.

If you're talking to someone 'learning programming' you should talk to them
and figure out a project that they can work on that would benefit them, and is
within their grasp.

Yes, the tools are a side concern. But what is going to help them is
automating a task they're interested in, or hooking some data sources
together, or creating a programmatic animation.

To teach someone english word by word and rule by rule fails. You want them to
read something interesting, to watch the subtitles on a movie. It's the same
with programming.

------
vama89
I agree. I am by no means a seasoned programmer, but I do remember first
starting out as a novice. It does get discouraging as a noobie when you hear
people in forums throwing around the latest tech jargon and some esoteric C
library just to show-off how much they know more than you. The more you
program (the older you get), however, you begin to learn it is all just
posturing. It's the occasional bad apples that perpetuate that "winner-loser"
MIT A.I. lab stereotype.

Trolls do serve their purpose though. It teaches you how to preserver despite
the negativity.

~~~
krilnon
> you begin to learn it is all just posturing

Yeah, I think that's probably the most common motivation behind the
interaction spotlighted in the article.

> Here's a sample interaction between an experienced programmer and a beginner
> who is just learning programming

I think the interaction happens between programmers of all levels of
experience, but it might be most harmful when it's an experienced programmer
talking to a beginner.

> It does get discouraging as a noobie when you hear people in forums throwing
> around the latest tech jargon and some esoteric C library just to show-off
> how much they know more than you.

If that's really their intent and if you (the noobie) are the one they're
talking to, then sure. If I'm a noob walking deep into a HN thread on an
esoteric C library, I'm probably not going to be discouraged that people are
using jargon, unless I've identified myself as a beginner and the comments are
replies to mine.

------
goshx
That's exactly what I heard from my first programming professor in college,
around 2001.

I told him I managed to get an internship at the university 6 months before
becoming an actual student and I was working with PHP. He said straight up to
me and everyone in the class that PHP was crap.

I didn't listen to him, since my bills were all getting paid regardless of his
opinion. I still got an A+ in his class, which was all on SmallTalk. This was
just the beginning of the number of conflicts I had between "real life" and
academic life.

------
hinicholas
Honestly, I don't think any language is detrimental to a persons development
as a programmer. Even straight Python and C have their quirks. Heck I'd argue
that PHP is a great base to start learning web development. Ruby, Python, and
.NET all have great frameworks that give you MVC, an ORM, and even templating
for free now days, but I feel like understanding the benefit and appreciating
those sorts of things comes with the experience of writing an application at a
level a bit lower than a full framework.

------
codygman
I have a friend who is using Java for some chemistry related programming that
could be modeled particularly nicely with lazy evaluation and ADT's.

I told him to keep sticking with Java and get something working, and then I
might be able to show him an easier way of doing it in Haskell.

He's actually a Math major as well, and seemed to understand Functors and (at
least) the Maybe monad very quickly.

It'll be interesting to see what happens after he finishes and we attempt to
replicate what he did in Haskell.

~~~
ww520
Second design/attempt is always the better version. Once he has struggled with
the first version, with whatever language, the second version will be easier,
with whatever other language.

~~~
codygman
Good point. Not sure how to avoid bias or if it's even possible in this case.
All I can do is let him know that the second design/attempt would have been
easier in just about any language.

~~~
alxndr
> "All I can do is let him know that the second design/attempt would have been
> easier in just about any language."

And then shrug and say it's okay, because this is how it works with everyone!

Personally I find the second attempt more fun too, since I've already learned
the painful lessons...

------
silluk
I think that one of the other reasons that people are discouraged from
continuing their programming is the information overload that you go through
when learning something new (Especially something so large and complicated). I
know that many of my friends have shied away because they felt like they where
good enough enough to understand the information they where finding online.
Hearing discouraging comments from others just helps reinforce that sense of
inadequacy.

------
Shivetya
Sadly this sounds exactly like many of the PC based programmers across the
hall. What is it with them? Its like water cooler hell with some of them, and
share code - hell they all can implement X better than someone else.

Is there just so much language bravado amongst this class of programmers or
did it bleed through from school? I have listened in arguments between Java
programmers, C#, and the like, and never understood the animosity some have.

------
xtrumanx
Personally, I believe the hardest language for a beginner to learn is their
first language. Two things people are learning on that first language;
programming concepts and syntax. The concepts like variables and looping are
(mostly) universal and as long as someone is learning the concepts well enough
I think they're doing well enough no matter which language they start off
with.

------
Kyoushu
I started off on the Amstrad CPC-464, which meant I had access to this fine
publication...

[https://archive.org/stream/amstrad-
action-016/Amstrad_Action...](https://archive.org/stream/amstrad-
action-016/Amstrad_Action_016#page/n27/mode/2up)

I spent many hours typing in code, only to spend a few more trying to work out
where the errors were coming from.

------
beached_whale
Data structures and algorithms are still the fundamental part. The rest is
just API and a way of communicating those ideas. Rarely the problem is
learning the language/editor/environment but learning how to think. The
discomfort with language/editor/environment... is just your brain learning
something new.

I guess it comes back to not blaming the tools.

------
esaym
I've been 'learning' perl for about 6 years now. I get crapped on for that all
the time. I also go to church. And I get crapped on for that too. Sometimes it
seems like everything of mine is just getting crapped on. But I do these
thinks because I like them and they make me happy.

So I don't really care what the others think :)

------
Sealy
Facebook.

Initially developed in: PHP

Why: It was what Zuckerberg knew!

Todays Value: $200+ Billion

~~~
nkozyra
This (tired) argument successfully says you can build something with anything.
But that's not really the topic at hand.

~~~
wpietri
I think it's a great point in this context.

Freaking out on beginners because they're using the "wrong" language is often
nominally based upon the notion that what tools you use matter a lot to the
results you get. But there are a zillion examples of successful products made
with terrible tools. And plenty of examples of very well-engineered failures.

~~~
nkozyra
If you believe the end goal is being a billionaire CEO, sure.

If you, however, believe the end goal is being a well-rounded programmer, it's
irrelevant.

In the context of "I'm learning to program," I think one should look more to
objective B than objective A.

~~~
wpietri
Saying the end goal of being a programmer is being a programmer is ridiculous.
The end goal of being a programmer is to make useful things. And you can do
that in PHP. Zuckerberg's a billionaire only because he made something that a
lot of people get value out of every single day.

Further, if being a well-rounded programmer _were_ the goal, then people
starting with whatever is fine, because becoming well-rounded means they'll
get around to better languages by and by. An I'd add that any programmer who
wants to consider themself well-rounded should definitely have used PHP or
some equivalently beginner-focused language.

~~~
nkozyra
> Saying the end goal of being a programmer is being a programmer is
> ridiculous.

Well I didn't say that. Note the not-so-subtle distinction.

~~~
wpietri
It's a distinction without a difference. The goal of being a programmer is
also not being a well-rounded programmer. It's still tautological.

~~~
nkozyra
The "goal" of learning to program can be a myriad things, from simple hobby to
being a CEO. If one presumes that the goal in some way hinges on being "good"
at programming, then learning good habits is certainly a step on any of the
possible paths.

------
slapresta
Completely agreed. I'm very vocal about PHP's flaws, but I try to keep my hate
away from beginners. When you're starting, the important part is getting shit
done. The language doesn't matter.

(However, as soon as the chance presents itself, I'd try to get said beginner
away from PHP. That shit melts your brain.)

~~~
imakesnowflakes
One problem I can see with that is, it is very hard for a beginner to see the
real flaws of PHP. So after he/she starts to get shit done in PHP, they will
have their head so far up their asses that it will take a large amount of
_your time and effort_ to convince them to move away to a better language.

For eg, take the case of PHP arrays. If you are a beginner, you will probably
have fallen in love with this thing. And when you show them a better language,
and they finds out that it doesn't have arrays like PHP, they might feel very
unsure about your claims that what ever you are introducing is the better
language. If they have found /r/php, then it becomes almost impossible to
convince them. You will have to counter the vague bullshit fed by 50 guys from
/r/php to make any progress with the matter.

So while the author point about getting your feet wet is important, it is also
important that you are not doing that be entering into a swamp that can suck
you all the way down.

------
freshhawk
It's 2014. Don't be a dick about it obviously but it would be cruel to let a
beginner learn PHP.

------
Osmium
If they're making something public-facing, and the language and/or framework
they're using is known to be more difficult to use in a secure manner, then
it's probably fair to warn a newcomer away. Otherwise, completely agreed.

------
cageface
The problem with the defense of PHP as a harmless beginner's tool is that
often once people become familiar with it _they go on using it_! And so we
find ourselves grinding away countless hours dealing with large codebases in a
language pretty much everybody admits is fundamentally badly designed. I
suppose I don't mind that much because I would never take a job working in PHP
myself but we certainly don't tolerate this kind of professional laziness in
medicine or science or proper engineering. Maybe that's why people don't
accord programmers the same respect?

~~~
sarciszewski
"Real programmers don't use PHP" is reminiscent of "Real programmers don't use
Pascal". Or [http://xkcd.com/378/](http://xkcd.com/378/)

~~~
cageface
Listening to PHP apologists defend PHP is like listening to real estate
developers boast about all the houses they've built and sold despite using cut
rate materials and labor. Bully for you if you're getting away with it but I
certainly wouldn't boast about it.

~~~
sarciszewski
Remind me again which percentage of websites runs PHP. (Hint: it's the
majority.)

But beyond popularity, there have been a lot of nice improvements over the
past few versions (PHP 5.6 is definitely better than PHP 5.2) with even more
to come in PHP 7.

To boot:

    
    
        * register_globals is finally dead
        * magic_quotes, as well
        * PDO does a lot of the work cleaning up SQLi (I wrote 
          a class that does even more)
        * hash_equals() makes securing OAuth implementations 
          against HMAC comparison timing attacks a trivial
          undertaking
        * session_id() uses /dev/urandom
        * opcache (5.5+) helps to make PHP app more performant
        * [ $array, $syntax, $that, $doesnt, $suck ]
        * You can now use \Proper\Namespaces; and autoload class
          dependencies!

Not to mention some of the community innovations:

    
    
        * Composer, while still trapped in curl | php hell (I'm
          working to fix this), makes dependency management
          simple so you can get on with your day.
        * Twig brings Django-esque templates to PHP-land, which
          is _awesome_ if you need to work with a designer who
          is only used to working with Django and its derivatives.
        * HTMLPurifier is probably the sexiest thing the PHP
          community offers that I have not seen produced in 
          another language (the HTMLPurifier port to Obj-C 
          notwithstanding)
    

If one were to judge PHP 5.6 by a PHP 4.3 understanding, they would almost
certainly be wrong.

PHP 7 allows us the opportunity to break BC. If you dislike something about
PHP 5.6, let it be known so it can be fixed in 7.

    
    
        http://news.php.net/php.internals
        
        internals@lists.php.net
    

Also, the irony of a thread whose title is to not denigrate what beginners are
learning has turned into "let's bash PHP". Y'know, because no developers are
currently learning PHP and might one day read this discussion.

------
seyfulislam
True words...though I also think that not giving a shit to demoralizers is
also something that every programmer should learn on the way.

~~~
vama89
Ahmen. Toughens you up.

------
wslh
At least the professional programmer recommended RoR instead of Haskell or F#!

------
rbosinger
Amen brother!

------
lnaie1
now you've gotten our attention. :) feels like it sucks!

------
paulhauggis
I used to live in a college town and I heard this a lot. Especially from the
RoR fanboys. The RoR fad is done, so I don't hear it as much anymore.

It is quite ironic, seeing as I didn't even consider the people saying it as
advanced developers. They had enough knowledge to mash a few frameworks
together.

------
dang
We changed the title to a sentence from the article that expresses its
substance more informatively.

------
yarrel
Oh you're learning to be a chef? That's awesome! What are you cooking?

Rat poison a la bleach? That's awesome! Let me know if I can help you with
that at all!

If only there was a middle way between denigrating and patronising n00bs...

~~~
jschwartzi
The difference between a good cook and a crappy cook is that the good cook
powered through all the crappy not-quite-there meals and learned everything
they could about what makes a meal good by tasting all of their own cooking,
and striving for improvement. Learning how to cook to taste is about
persistent trial and error, just like learning how to develop software is
about persistent trial and error.

There's no right or wrong way to cook. It's all about what you personally have
a taste for. For example, Natto is something I personally find distasteful.
However, people have put effort into learning how to make Natto and they
personally find it delicious. It meets their needs. Who am I to devalue their
experiences?

By the same token, PHP meets needs and there are plenty of people who develop
effective software with it. If it's working, and you don't find its warts to
outweigh the value you get, then you should continue using it.

~~~
Retra
>There's no right or wrong way to cook. It's all about what you personally
have a taste for.

Only if you're cooking for yourself.

Additionally, I've developed a near vomitous reflex whenever I read "there is
no right or wrong way to..." If there is no wrong way to cook, there is no
reason to have cooking schools or to pay people to do it.

Of course there is a wrong way to cook. Pretending that you can't fail at
something is pretty much guaranteed to ensure failure.

------
rhizome
I've heard this anecdote told for years, over a decade, but I've never heard
it occur in real life. Has anybody, really?

~~~
sarciszewski
Yep. In various iterations.

[https://twitter.com/MalwareJake/status/506488937096183808](https://twitter.com/MalwareJake/status/506488937096183808)

------
nvk
Everything you say is good but the PHP part. It's just like telling your own
kid to not touch poop, you have to say it.

~~~
clubhi
I'd be very surprised if you really knew much about PHP.

~~~
sarciszewski
[https://github.com/coinkite/coinkite-
php/blob/master/sign.ph...](https://github.com/coinkite/coinkite-
php/blob/master/sign.php)

You can be the judge of their PHP skillz :P

~~~
nvk
We don't do PHP. If you are so great, why don't you do a Pull Request.

~~~
sarciszewski
> We don't do PHP. If you are so great, why don't you do a Pull Request.

Your post seems rather hostile and I don't think it's warranted.

First, you call PHP poop.

Then someone expresses doubt that you use PHP at all.

I then linked this person to a repository in your github that is written in
PHP.

Thus, my actions were disproving the implied statement in "I'd be very
surprised if you really knew much about PHP."

At no point did I say I am "so great".

Calm your jimmies. They are rustled thoroughly and for no good reason.

------
brunorsini
Don't want to sound like the PC police but personally I would have chosen
another verb for the title. The origins of the word "denigrate" are not
particularly great:

1520s, from Latin denigratus, past participle of denigrare "to blacken,
defame," from de- "completely" (see de-) + nigr-, stem of niger "black" (see
Negro).

(source:
[http://www.etymonline.com/index.php?allowed_in_frame=0&searc...](http://www.etymonline.com/index.php?allowed_in_frame=0&search=denigrate))

~~~
bglazer
It's not an explicitly racist term. Just like "blacklist" or the "pot calling
the kettle black". Black has a negative connotation that is separate from
race.

[http://english.stackexchange.com/questions/209021/is-
denigra...](http://english.stackexchange.com/questions/209021/is-denigrate-a-
racist-word)

