Hacker News new | past | comments | ask | show | jobs | submit login
Please don't denigrate what a beginner is currently learning (pgbovine.net)
370 points by danso on Dec 7, 2014 | hide | past | favorite | 157 comments



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.


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.


I was about to quote this quote, but I have a different opinion here.

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

The line between teaching a truth and teaching a self-enforcing belief pattern has not been drawn, and I don't know if it ever will be. You can be an amazing teacher and not even know it (by making horrible mistakes that other people learn from by observation, comparison, abstraction, and analysis). Or you can be a really amazing teacher and never admit it.

> 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.

That's good advice.


>>>>> The line between teaching a truth and teaching a self-enforcing belief pattern has not been drawn, and I don't know if it ever will be. You can be an amazing teacher and not even know it (by making horrible mistakes that other people learn from by observation, comparison, abstraction, and analysis). Or you can be a really amazing teacher and never admit it.

Great points. Thanks.


I taught myself to program in .NET (VB and C#) this year and I've really enjoyed it. For someone who lacks the perspective of a seasoned programmer, I am routinely blown away by how easily you can incorporate .NET libraries to do cool stuff. One example - Microsoft has a standard speech recognition library, which works well for constrained grammar. As such, a desktop app with voice recognition was very easy to do.

For a variety of reasons, prior attempts at C++, Ruby, PHP never took hold for me. The main reason was I had no compelling project to complete (I have a few now, related to work). Yet, looking back on these episodes, and the experienced programmers will surely laugh, but getting a basic environment up where you can write code, build and deploy is difficult for the uninitiated, if you start on Windows as I did.

Later, with a mac, I did the first 1/3 of the one-month-rails course, which actually saw me through to creating a working ruby environment. There's lots of domain expertise which makes ruby inaccessible to the newb, not the least of which is that the most common IDE is a glorified text editor. Compare this to all the "spell-check" equivalents in Visual Studio.

anyway, now that I have a foot-hold somewhere in programming, I have a frame of reference to look up (and mostly down) the stack. Looking forward to learning more.


It's tough being smart and influential: your [Dijkstra's] successes and mistakes end up going through the same megaphone.


That's certainly true. I keep the quote, as a conversation starter if for no other reason. And I can't claim to have proven Dijkstra wrong. ;-)


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.


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


Scratch ( http://scratch.mit.edu) is way better environment to start with than C e.g for kids.


>Just let them first learn something (anything!!!) to get hooked onto the potential of programming, and then you can offer to show them the true light later.

pgbovine nailed it. I learned this lesson from mathematics (I studied math in college and theoretical CS in grad school): the best math teachers always introduced a new concept/idea using a "toy" example. A toy example may not have the full generality of the overarching theory/idea, but it has all the essence without any of the abstract inaccessibility.

I try to apply the same lesson when I teach people data analysis: I learned (through my time as a quant on Wall Street) that a lot of people feel very comfortable in Excel but find other data analysis tools (SQL/R/Python) too abstract/scary. So, instead of telling them "Oh, you should use Pandas with Postgresql" or "that stuff can be done better using R", I show them what the equivalent operation looks like in Excel first, then show them how they can be done in SQL/R/Python (See, for example, this: http://blog.treasuredata.com/2014/12/05/learn-sql-by-calcula...)


John Foreman's book _Data Smart_ follows the Excel-first methodology, and I've been appreciating how well this separates the data analysis from the toolset choice.


Yea, I am a big fan of that book. I tend to think of it as a well-executed troll against the fad-driven, toolchain-crazed "data scientist" communities.


30 and started with QBasic. Yeah yeah... i heard it was terrible at the time but i didn't have internet to get a real compiler or language. Had a lot of fun though. nothing anyone told me could stop me.

Also, if i wanted to make windows programs, Win32 was an impossible beast to me. I, to this day, still have no idea how that mystical beast works even though I've coded a few programs in it. Some of these "frameworks" can be a little code heavy and have lots of technical details (MVVM and WPF come to mind) They are completely overwhelming while php and basic are simple and have little magic. That said, if i were to have a child soon, I would teach her racket using SICP.


I've never met a language that isn't broken in some way. They're tools—my only real advice to beginners is to branch out once you get a handle on your first language.

My first language was MBASIC on a Kaypro 2, because that's the toy my family had to play with. When I branched out (from QBASIC), I first found assembly—first, for the 8085/Z80, because the public library where I grew up sucks at life.

Thankfully, the Internet happened, and I found information about x86 assembly—but better than that, I finally got my hands on more than one C compiler. Then, I discovered Linux and found Perl and Python. Somewhere in this timeline I also found Java, which turned out to be a great way to bring a 486 to its knees.

I'm glad I took this drunkard path through programming. First, I learned how my machines actually work. More importantly, I learned all languages are made of trade-offs. C++ is nowhere near perfect, but it lets me get work done at the level of abstraction I choose, which turns out to be a win for the things I do. But it's definitely not for everyone or every project.

Most importantly, I got a gentle exposure to programming, followed by a series of challenges that taught me without demoralizing me, allowing me to build myself up to the point where C++ seems like a relatively tame beast.

Edit: One of my favorite books ever (http://www.dspguide.com) presents code in BASIC as a least-common-demonimator language. Even a limited tool like BASIC can do amazing things.


what??? my language isn't broken!!!


I'm 32 and started with QBasic in DOS in 1994. After creating a program that reached 1000 lines of code (which I considered enormous at that time) I started to feel the limitations of the language. I then got a hold of a compiler for basic which sped things up a bit but went on to teach myself C. I was blown away by the improvement in speed! After the equivalent of "hello world", I created a minimal basic interpreter as my first C project which taught me a lot about the differences as well as a wide range of tasks in C that had little external dependencies (didn't have to deal with drivers or graphics). While the patterns I learned in BASIC weren't ideal, it was enough to give me the love of programming and and a lot to appreciate about the power of C. Then I got into web dev and was writing CGIs in C/C++ (even to the extent of generating jpeg charts from dynamic data). When I later discovered PHP I was ecstatic that I didn't have to recompile every time and db interfaces were so easy! It's all been a fun learning journey. I now also work with Rail and Node.js and embedded C/C++, and no, I no longer use SSI or CGIs, most definitely not in C!


Hell, I'm 22, and the first few years of my programming life were with TI-BASIC.


TI-BASIC, as in TI-99/4A?

How many times did you lose your work due to a fat-fingered FCTN-= instead of SHIFT-=?

At least that prepared 6 year old me for the adult world of "rm -rf . *".


IIRC if you had the Extended BASIC cartridge you could poke a value in a certain address and disable the FCTN-= action (which was an immediate reset of the computer, losing any unsaved work).


Probably TI-89 or TI-83+ graphing calculator BASIC, given his age.


You never know. I finally took my 99/4A to the recyclers just a few years ago. Had had it since new in high school, and it still worked.


I made a blackjack program on my TI-85 (with real arrays of suits!) that took 5 minutes to compile...


TI-83+ for me; the TI-99 is a decade older than I am.


30 years old here, started off with TI-BASIC on a TI-83 that I beat the crap out of.


I'm in my late 20s and started the same way. Ended up leading to my first entrepreneurial pursuit - I made money by coding games and getting friends to pay me to put them on their calculators.


Visual Basic 3 for me (although I did a bunch of BASIC on commodore64 in the early 80s).

There weren't that many high/entry-level languages back then, though. The argument that BASIC is terrible notwithstanding, it was often either that or a very low-level language.


I think we (I'm 36) should also bear in mind that we'd probably be better programmers if we were starting out today. HTML + CSS + JS + PHP is worlds ahead of the rubbish we were using!


As someone who learned MS BASIC 2.0 -> 6510/6502 assembler -> Pascal -> C -> etc, I know we'd be more immediately productive, but would we necessarily be "better"?

I run into a fair amount of programmers these days who never worked with a non-garbage collected language, have never even seen an assembly language listing (let alone written code in assembly), etc who are generally productive but end up being really lost whenever whatever leaky abstraction their language/framework/etc is using inevitably breaks in some way and in this situation if the solution to their problem isn't immediately Google/StackOverflowable they are standing in front of a brick wall because they've never worked in a language or environment that wasn't abstractions upon abstractions over how computers actually work at a fundamental level.

I'm sure there is some amount of get-off-my-lawnism going on here and I know it isn't universal (there are still young kids writing real bare metal bit-banging code, especially in the maker/"IoT" space), but I think that while highly programmer-time-productive languages and frameworks are great we're still at a point where those skipping over the fundamentals the technology is built on do so at their own peril in terms of how effective they can be when things don't go as planned (and in software things rarely go as planned).


Computers are themselves abstractions upon abstractions. How many levels of cache does a modern computer have? How many memory protection layers exist between your code and the machine? Hardware keeps getting more complex and it becomes obsolete quickly.

It's hard to teach this stuff to beginners because it will probably be useless by the time the get good enough at programming to do anything. Add to that the fact that there are probably 15,000 different platforms all doing the same things in subtly different ways .

PS: 'subtly' is a horrible word.


> writing real bare metal bit-banging code

Well, there are plenty of microcontrollers running on Javascript/Ruby/etc, so if people are still writing "real" code, it won't be for long.


Just to clarify, the "real" I used was a qualifier for the bare metal code description.

I'm not suggesting JS/Ruby/whatever code isn't "real" code, but it is pretty common to see people talk about some JS/Ruby/etc code being "bare metal", totally abusing the classic meaning of the term.

Examples (just a couple out of many dozens I've seen over the past few years):

http://video.kiberpipa.org/jsmeet_slavic_performance_optimiz...

http://www.hyperscala.org/

Efficient JavaScript is great! But it isn't bare metal programming.

Also people will be writing low-level C/asm code on small devices for quite a long time yet. While it is great that you can get small "IoT"-style devices with the power to run a JavaScript interpreter, such SoCs are still really expensive by "chip whose cost must be factored into every device manufactured" standards.


No I don't agree. HTML + CSS + JS + PHP (and also probably + SQL) is a lot of layers and languages to get your head around as a beginner. A single simple environment (e.g. Python or even BASIC in a REPL) is going to be a lot easier to focus on.


No, I don't agree, I never managed to "study" programming using an editor and a compiler. I always had to have a reason. I read, poked away, tested, got burned, read, poked etc.

That kept me focusing. And, I learned it and mostly got better grades than the "student" types as well. (B.Sc Computer Systems).

Generally it seems for some of us it is easier to focus once things make sense and has a purpose.

"Studying" seems to be for people with infinte lifespans and neverending funding, I never had any of those and I guess it affects my learning style ;-)


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.


Key to what you are saying (I agree) is that by starting to write something (even a shell script) you get instant feedback and reinforcement.

If you are spending time understand a framework you don't get to that part as quickly.

While it may seem trivial even having someone see what happens in the shell when they do simply from the command line:

Lesson One from the command line:

echo "Enter your name:"

read x

echo "Hello $x"

..is the type of reinforcement that allows someone to feel as if they are making progress.

Lesson Two: Ok let's put that in a script and make it executable:

...and so on.

(Obviously equivalent examples with Php.)


I'd take it one step further and argue that it doesn't matter what they code in, it's the outputs that matter. Facebook is a billion dollar company, and their code base is PHP. There are still enterprise level companies that maintain Visual Basic programs. Yume nikki is made using RPG maker, and it doesn't make a bad game.


> Facebook is a billion dollar company, and their code base is PHP.

Great point, because allegedly, their original code base wasn't even in decent or organized php, it was just includes and inline sql queries.


In that regard, JavaScript is even more accessible; just put a <script> tag around the code, save it as an .html file and double click it. You don't even need installation permissions, since every computer comes with an interpreter installed.


And you can even do graphics in it too, which may be much more appealing to some one who is trying to learn programming. To me, moving a circle across the screen is much more rewarding than putting a HTML form with 20 input fields on it...


> 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.


But the thing is for many people (at least for me) was the instant gratification PHP provides can be a powerful hook. With PHP you can create interesting visual things with virtually no experience, no boilerplate required. It's one of the few languages where that is (was, more options today than when I learned) really possible.

PHP wasn't the first language I learned, but it absolutely was the language that got me hooked on programming by giving me the power to create things, visual things, interactive things, and more importantly, let me do so without following a step by step tutorial (I had basic html knowledge prior).

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

Very true, I had some bad habits from php that took me a while to kick, but for me it was a small price to pay.

> 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.

These days that may be the case, but many commenters here are referencing when they were learning to program, and a decade ago it was something incredibly unique to PHP.


> 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.


> 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.


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/

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


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/10/plesk-and-django/ (full disclosure, I work for Parallels & had our dev team take a look at this question.)


It's been a very long while since I've been in either of these, but I recall Plesk having a shell. With that the case, the Python/Ruby file could be dumped somewhere (ideally the vhost root) and then just run through the command line in a long-lived process or daemon. Port 80 is obviously taken by Apache, but other than that ...


It is not that it is impossible to do it in another language. It is just that it is relatively simple in PHP. Single file does not necessarily mean simple.

Bad habits can be induced by a language, but if you are still at the point where you're learning the concept of variables, you're way before the point where you'll begin to pick up bad habits.


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

Do we have a set of good habits defined? That seems no different a question than "What's the best programming language?" and backed by just as much opinion and authority as "Language X sucks! Use language Y!"


Despite not being a ruby programmer, this is why I've loved _why's shoes framework (http://shoesrb.com/) You're not going to use it on an enterprise project, but in terms of just getting shit done with a little friction as possible it's great — and that is precisely what a beginner needs.


Also, you could pay $20 for a server for a year, upload it, and boom! No fucking around with devops bullshit, like my current project.


I know Angular is getting a lot of HN hate lately, but it really helped me get my feet wet. It was much easier to get basic apps running for me in Angular compared to messing around with Rails or Django. For a basic backend, I can use firebase. Surely doing it this way has limitations, but it allows me to get in a positive feedback loop so much sooner.


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.


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.


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.


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).


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).


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


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.


> 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/ 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.


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.


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).


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.


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.


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


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.


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.


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.


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.


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.


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.


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.


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.


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


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."


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.


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.


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.


PHP is fine but it has problems:

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/


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'.


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.


"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'.


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.


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" :(


... 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.


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.


> ... 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.

Yes, exactly, that was my first thought too. I'd add things like microprocessor architecture (like the von Neumann architecture, the cache hierarchy and how memory is structured), Turing-completeness and Turing Machines (which probably fit into your "computational complexity category"), programming language design and implementation (including things like parsing and grammars), and concepts like object-oriented and functional programming.

For example, a lot of programmers struggle with C, until they read about computer/processor architectures and realize how the processor accesses memory.


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.


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.


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.


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?


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.


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.


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.


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.


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.


> 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.


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.


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.


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.


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.


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.


> "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...


Why not have him doing the first attempt at a problem with Haskell and then tried it with Java to see how easier/harder it is?


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.


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.


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.


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...

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


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.


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 :)


Facebook.

Initially developed in: PHP

Why: It was what Zuckerberg knew!

Todays Value: $200+ Billion


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


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.


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.


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.


> 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.


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.


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.


Or objective c!


I deserve that.


Yeah its a fair statement that it depends on the context.

Ultimately it will depend on the beginners' goal however just to highlight one point to beginners with dreams of big exits and start-up goals. The debate about what language is better becomes a moot point when there are clearly large and great companies being built on even the most basic languages.


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.)


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.


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


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.


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?


"Real programmers don't use PHP" is reminiscent of "Real programmers don't use Pascal". Or http://xkcd.com/378/


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.


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.


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


Ahmen. Toughens you up.


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


Amen brother!


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


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.


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


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...


There is a middle way, and that middle way is to realize that the relationship between PHP (and other frequently beat-upon languages) and other programming languages is not at all like the relationship between Rat poison and a normal meal.

Most any language can teach the absolute fundamentals of programming (logic and how to control it, loops, if/then, functions), and it doesn't really matter to a beginner, nor will it really affect how well they learn or the quality of their learning.

The middle ground is to do as all teachers do:

1. Accept

2. Advise

3. Advocate

As a mentor, we first accept the terms of the students curiosity. The student lacks so much information about making any choice, that when they say "I want to learn PHP" it does them almost no good to try to head them off or explain why they should choose something else. As the mentor, we must accept the students line of inquiry and begin to foster this curiosity with the situation we are given.

Next, the mentor must advise. Once we have accepted the line of curiosity that the student has chosen, we feed this flame with more information. The students curiosity will take hold and begin to spread to other areas, testing and learning from this original place of understanding. As the student questions, the mentor answers.

Eventually, the student will begin to have confidence in what they have learned. They will learn and work for information more readily, and will come to the mentor less and less often for advice and counsel. Once the student is at this point of confidence, the mentor can begin to advocate for ideas and concepts as yet unknown to the student. This is where the real learning happens, where the student has been given enough information to even understand and make sense of the mentors advice. This is the time for the mentor to say "maybe you should not use PHP. As you can see, there are things that are inconvenient and which you wish where different. There are other languages that provide what you seek." The student, now properly equipped to understand the mentors advice, can follow them.

This structure is how many of us, inadvertently or not, learn the crafts we know.


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.


>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.


The difference - and I hope this isn't being patronising - is that rat poison a la bleach can never be anything but poisonous, whilst a good programmer can be perfectly effective using HTML and PHP (depending on the task, of course).


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



When I was younger (13-14) I started playing around with VB5 completely organically to try to build an application that would manage photos (my father has a photography business).

I was discouraged against both the programming in VB (it's beginner stuff and you can't make anything good with it, was the basic message) as well as against building/finishing the image view/organization tool (at the time ACDSee was all the rage, and I was going for something of that nature).

Well, sadly, that was all I needed to hear to realize that I was going down the wrong path and if I wanted to get into programming I would have to wait until college.

Thankfully I found PHP (gasp) a few years later.


Variations of it. It could also be something as simple as "You don't know how do to XYZ in JavaScript?! It's like 101!" Either way - encouragement/mentoring is always good.


I've had it happen to me. My mentor was going over a perl program of mine, showing me some beginner mistakes, and I was making good progress in understanding where I went wrong. Then a friend wandered in, sat in the loungeroom, and started throwing out abuse at perl and how it was a stupid language etc. Focus completely broken, and no more progress was made, because this guy just had to abuse language X to a beginner learning it.


You must have missed "PHP: a fractal of failure" or the endless rounds of sniping whenever a university changes from teaching its Into to Comp Sci courses from <whatever> to Java.


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.


Meh. I wouldn't try to sway them away from PHP, but I'd try to get them to try something else as soon as possible, and make the introduction to the language an overview of harmful PHP-isms (i.e. explaining the difference between arrays and objects, how equality works on a non-fucked language, showcasing a standard library that isn't a minefield, etc)


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


https://github.com/coinkite/coinkite-php/blob/master/sign.ph...

You can be the judge of their PHP skillz :P


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


> 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.



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...)


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...


So many, many linguistic troubles descend from some blind idiots deciding to call pink and brown people "white" and "black," and subsequent assumptions that all white/black color metaphors must therefore be racial.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: