Please don't denigrate what a beginner is currently learning
pgbovine.net
pgbovine.net
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).
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.
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...
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.
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.
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 ;-)
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.
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...)
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.
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 . *".
"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 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.
Great points. Thanks.
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.
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.
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.
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.
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.
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.
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.
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?
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.
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!"
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.)
Great point, because allegedly, their original code base wasn't even in decent or organized php, it was just includes and inline sql queries.
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.
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.
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.
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.
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.
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.
Where you start doesn't really matter at all.
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.
"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."
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.
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.
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.
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.
It's a lot easier nowaday, with internet and interpreted language in your browser.
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.
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
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.
~ I've worked in Symfony 1.x, Laravel, and Ruby on Rails.
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.
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/
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'.
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'.
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" :(
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.
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.
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.
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.
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.
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.
Trolls do serve their purpose though. It teaches you how to preserver despite the negativity.
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.
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.
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.
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...
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.
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.
I guess it comes back to not blaming the tools.
So I don't really care what the others think :)
Initially developed in: PHP
Why: It was what Zuckerberg knew!
Todays Value: $200+ Billion
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, 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.
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.
Well I didn't say that. Note the not-so-subtle distinction.
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.
(However, as soon as the chance presents itself, I'd try to get said beginner away from PHP. That shit melts your brain.)
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.
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.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.
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'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.
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.
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.
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.
You can be the judge of their PHP skillz :P
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.
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://english.stackexchange.com/questions/209021/is-denigra...