There are few things in life more important than choosing one's peer group well. The Internet gives you many more options than we had available prior to the existence of it. Choose wisely and re-evaluate that choice periodically to see whether your peer group continues to represent your goals and values.
Why? Your peer group literally gets arbitrary code execution on your brain. (It's a flaw in MonkeyBrainOS 1.01 which we haven't patched yet.) You'll tend to find yourself valuing what they value. You will tend to find yourself achieving outcomes strikingly similar to their outcomes.
Given this, picking a peer group whose values are not your values and whose outcomes are terrible is a poor choice.
There is some cognizable peer group of "the most misanthropic 10% of commenters on Internet threads about programming languages." The majority are not professional programmers. Most are not very happy people. You can generally tell a lot about what a person values by what they spend their time doing; someone who professes to value the great intellectual challenge that is Real Programming but actually ships comments which make other people feel bad probably, to a first approximation, values making other people feel bad.
If you do not also want to grow into a values system where making other people feel bad is the highlight of your day, consider choosing a better peer group, where e.g. feeding one's family through honest labor is valued and having very loud opinions about NodeJS not so much.
If i ever met OP this is what I would tell him.
There are two ways a low self esteem can materialize. One way is to put down the world to make you feel bigger than them. The other is to feel bad about yourself and proactively try to improve in anyway you can. Both might be unhealthy...but if you are like me and have a low self esteem...you are a million times better off being the second guy than the first...so you have that going for you.
The reality is that you likely noticed these negative comments and took it to heart because of deeper issues. It sounds like you had a very difficult life so far. Try to focus on the good you do. Realize that programming is a tool to create things. Creating things is the greatest thing you can do in this world. Creating is a form of giving of yourself to the world. The knowledge in your head is yours but the websites you built are a real contribution. A positive contribution. Never stop creating and giving of yourself and try to remember wheneer you see a negative comment that you are giving good to the world and that commenter is giving bad to the world. If you focus on admiring those that create and give and forget the selfish ones that take and take.. You will slowly find your self worth from the people out there who build people up not break people down.
This wont get fixed over night...but you are not alone and you are on the right track.
I wanted to say something like your comment is just 1st order making people feel bad about 0th order making people feel bad, but then I'd be 2nd order making you feel bad about 1st order making people feel bad about 0th order making people feel bad, so then I just thought about how I felt and it was bad. What a mess. Good points about the importance of choosing a good peer group, I totally agree. It's really hard when you have more than one group.
Interestingly, I've learned to love having more than one peer group. I felt like a floater all through high school and college, like I didn't belong anywhere, but around age 30 I started viewing that as a source of strength rather than of weakness, and "I belong everywhere" rather than "I don't belong anywhere". My wife and many of my close friends (that don't belong to any particular peer group) are the same way.
There's a certain irony where, although it sometimes feels lonely being a floater, such people often seem to have higher status when viewed from the outside. They're confident enough to not be defined by their peer group, after all. Few people are, and many people wish they were.
Thanks for the positivity, it's hard to remember that how you see yourself is not how others see you. Whenever other people tell me that others look up to me I'm like wtf are you talking about. I have about five major peer groups, it's kind of like the jack of all trades, master of none conundrum.
It would depend on what you were actually feeling behind your appraising comment, would it not?
On the one hand, one tacitly feels contemptuous towards the other group and tries to come across as dispassionate in their appraising comment. On the other hand, one feels considerate (or neutral) and simply calls a spade a spade in their appraising comment.
When you take the entire context of people's interactions over time into consideration, the former is likely to be hurting (overall) and the later is likely to be helping (overall) even though certain specific instances may come across as the opposite.
tl;dr - feelings and vibes (over time) matter more than words (in individual instances).
May I quote your first two paragraphs?
I have a few people starting out as programmers who really need that kind of language to get that point to them.
Those are great, however I think "arbitrary code execution" in MonkeyBrainOS is not a flaw but working as intended. Better think twice before patching it, it may be part of this feature called empathy.
Most of mine are face to face real people - some of those started out from blogs and IRC, in a kind of incubation stage. Some have been graduated from Twitter to a kind of incubation where I await meeting them in person before I afford them "write access to my brain". I find meeting people in person, one is able to really gauge people's personalities, passions, sense of humour, side interests and the like. And the side effect of meeting your heroes is that they appear to be just as human and fallible as yourself!
Opinions come from passion. You don't care for opinions because you are not passionate about programming. You just want to get a job done. To you, these opinions are noise.
Linus is very talented. He is also a raging singularity of abuse who gets tolerated for it because he is extremely talented. I worry a little bit about logic which suggests that anyone who is insufficiently Linuxian in dealing with other people is thereby assumed simply to care less about programming.
Oh, come on. We hear about an over the top email every couple of years and we discuss them endlessly. Linus gets talked about because all of his communications happen in an open record. Not that it excuses his abuse, but a "singularity"? Please. Offices I know have instances of that kind (and worse) abuse every month, if not every week.
Exactly. It is not abuse to honestly review a patch or an idea, and block its progress pointing out serious deficiencies. This is just a way to assert quality, and apparently it is a very effective way - we do trust Linux.
You are not the code you write. Accept the critical comments and improve.
Honesty is not abuse. But abuse is often misrepresented as honesty, and intolerance of abuse is often misrepresented as an inability to accept useful criticism.
Anyone who is actually concerned about honesty should be able to recognize the existence of abuse and draw a clear distinction between the two. But if every time abuse is brought up, you pretend that honesty was brought up, accuse the speaker of attacking honesty and mount a defense of honesty without ever acknowledging the existence of abuse, then it is clear that you simply reclassify all instances of abuse as honesty, and are really defending abuse. As a heuristic rule of thumb, that's a strong indicator that you are yourself a habitual abuser, because other people don't have much reason to defend abuse.
Everyone screws up from time to time, but it takes faulty rationalizations to keep screwing up in the face of criticism. If you see a lot of feedback which indicates you are behaving harmfully to others, your first conclusion should not be that the people giving this feedback are against honesty and criticism. You should ask yourself why you so often seem to run afoul of this kind of feedback, and why you are so defensive about it. Attacking people for saying "this thing you do is harmful" is an indication that you yourself are not good at taking criticism.
And, considering consequences, it's probably even more important to be able to take criticism on doing active harm to others than to take criticism on the importance of garbage collection.
You have a valid point. It is, indeed, possible and often quite easy to misclassify abuse as criticism. However, I disagree with this part:
> Considering consequences, it's probably even more important to be able to take criticism on doing active harm to others than to take criticism on the importance of garbage collection.
All three major operating systems, this is Windows, Mac OS and Linux, all have or had leaders (Gates, Jobs, Torvalds) that on numerous occasions proved themselves to be harsh and very open about their criticism. One might want to say - they were/are class-A assholes. What we want to believe is one thing, but the recent history of major operating systems disagrees with your point of view.
Linus Torvalds has been pretty coarse with his lieutenants in the past, but on the other hand he does not sit around in programming forums telling novice programmers that they should feel bad because they used a language which doesn't have static typing. That is a passion, but the passion is not programming. The name for that passion is "sadism" and while some sadists program, to a first level of approximation, if the primary output of someone is public sadism then programming is at best on that person's back burner, likely not something they're actually very good at, and plausibly not something they really even do.
Frankly, I have a hard time believing that the misanthropic commenters on r/programming are major opensource contributors. The most prolific programmers simply don't have time to waste on comment threads.
"Of course, I'd also suggest that whoever was the genius who thought it was a good idea to read things ONE F★CKING BYTE AT A TIME with system calls for each byte should be retroactively aborted. Who the f★ck does idiotic things like that? How did they not die as babies, considering that they were likely too stupid to find a tit to suck on?"
- Linus Torvalds, principal author of the Linux kernel
Linus was speaking abusively there, but he wasn't just speaking abusively: there was a context. That context wasn't that Linus spends hours every week trolling Reddit by putting people down and making snarky remarks about every new project. The comparison to Linus is really irrelevant and needs to stop.
Probably because the things they do aren't up to scrutiny. You don't know it's bad until someone/something comes along and tells you, or you just happen to discover a better way on your own (that someone else has probably already discovered). The computer doesn't shock you if you write terrible code, after all.
Perhaps the best part of some jokes is that half of the monkey people take these exaggerated fictions seriously and become quite upset upon processing them. This is in itself also a joke.
I pulled back from the community around some of the stuff I use for much the same reason, it's the same people telling other people they are "doing it wrong" and yet almost without fail those people aren't doing anything interesting.
The ones I still respect don't say a real lot but either have amazing blogs full of interesting stuff or repo's full of interesting and useful projects.
As my grandfather used to say "don't tell me I'm wrong, show me".
The "language hate" in programming is truly cancerous.
I know several people who started programming only to get twisted and turned around by experienced developers saying, "Don't learn PHP" then "Rails is a joke and doesn't scale well." I talk to them a week later, and they're trying to build a simple web app in functional Haskell, and their environment is all messed up because they are using a zsh configuration they don't understand and github is telling them to put stuff in their .bashrc.
Especially when you're getting started, it just doesn't matter. Open up a text editor - it doesn't matter if it's vim or emacs or notepad, and start building something - it doesn't matter if it's PHP or Node.JS or Rails or LISP. Just do stuff. Then take on the next challenge, and grow from there. You don't start out hacking the Linux kernel.
Momentum is the thing that truly matters. Learning and creating is like a conveyor belt - if you stop the conveyor belt to move the things around and make sure that you're doing everything right, progress stops, and you're probably going to do more harm than good. Keep the conveyor belt running at all costs.
Discouraging that momentum because the language isn't "good enough" is like telling someone who is learning to ride a bike that they should jump on a motorcycle. No one would question that motorcycles are better than bicycles, but you probably don't want to start on one.
My general rule of thumb is that if you don't know why something is better yet, you should generally avoid using it. If you don't know how to write CSS, you don't need LESS or SASS or Gulp or Bower or whatever. Once you write a project in CSS, the need for SASS becomes obvious, and you appreciate it.
Of the several programmers I know, I don't know any who started out writing machine code. Most started out writing PHP (some Java), but they got the ball rolling and learned quickly.
Along the years I have come to admire more and more those who take what they do know and put the effort into just that: building something.
The idea of purpose is key here.
Once you have a purpose, a goal, finding the right tool for the job is no longer that difficult and you will suddenly realise that a lot the languages/frameworks people have been evangelising to you may make no sense at all.
"If you don’t know where you’re going, any road will get you there." - Lewis Carroll
Somehow this turned into a thread of people debating the merits and faults of PHP. There's a place for that, to be sure, but that's not really the point.
The point is that getting started is the most important thing, and moving forward is the next most important thing. I'm not saying if someone comes to you and says, "I want to build a web app" one should say, "Do it in PHP." But if someone says, "I'm building my first web app in PHP" the most damaging thing you could say is, "lol you're coding like a noob. You should be doing that in {language x}."
I see happening all the time. Coding in PHP is better than not coding because you're terrified of not doing things "the right way," and that often is the alternative. Let him or her finish a project in PHP before you try to turn the ship around and make him or her learn Rails. Or JavaScript or Python, or Java or whatever. Just start.
Exactly. For me the real art of programming lies in the getting stuff done. KISS, YAGNI ... the smartest programmers I've ever worked with - the ones I'd want to work with again - were masters of getting results on-time or even before-time with clever, minimalistic solutions.
On one hand, it does have the disastrous effects described in the article. On the other, those kind of comments from some FP programmers did turn my attention to FP languages. Turns out, there is this amazing group of people that are trying to build an entire ecosystem that stands on solid mathematical foundations. That was really exciting stuff for me. For years I've been watching our profession struggle with brilliant but ad-hoc creations, every single time being crushed by its accumulating weight of crutches and of the impossibility to reason about things once they grow to a certain size. Now it seems like we're really close to fixing this (that is, even outside of academia).
But maybe there is a way of getting people's attention without causing unnecessary extra damage. We (as a profession) ought to be able to do better than that...
Haskell us perfectly fine to start with. It's just Haskell + zsh + git + archlinux + vim + cool-tech aren't things you should learn all at once. Heck, 12 years in, and I'm still lot fluent in all of those.
We can still tell people about cool stuff, just encourage them to take one step at a time, in their own time.
I know Haskell is the introductory programming language of choice at many British universities like Oxford and Cambridge. In the US C, C++ and Scheme (functional) are all in the top 6 most common ( http://cacm.acm.org/blogs/blog-cacm/176450-python-is-now-the... ) so I don't see at all why those shouldn't be good choices.
I feel learning one Algol derived language such as Python followed by Haskell is a good solution. Perhaps even better (of not more painful) would be to learn C followed by Haskell.
The conveyor belt metaphor is one of the best that I have ever heard.
It's fine to start out with anything, I did pascal/visual basic in high school. Then did Java/PHP in college.
First year of college I did contract work in PHP and in WordPress. It was fun the first year or so and I love that I could have that "instant gratification" moments that PHP is famous for.
Then as I grew and learned about things like concurrency, algorithms, HTTP, networking I found myself wondering off to other languages such as Ruby. Then I learned Ruby and now for a year already am doing Rails and Angular and truly enjoy it.
The thing to note here is back in a day when I was doing PHP , I heard a lot from community members and other software engineers saying something like "PHP SUCKS" and stuff like that, but I did not care because everything I wanted to build in that time I could do with procedural PHP or some OOP php or some Wordpress magic. When I realized and knew `why` I want to learn other stuff everything became clear.
The hatred of PHP amongst a certain type is hilarious, they automatically assume that if you chose PHP (or worse program in it because it was what you inherited as well) you are a "lesser programmer".
I choose to use PHP despite been capable of using most any language I wanted, over the years I've used and forgotten many languages and for the requirements I have PHP was a good fit.
Also modern PHP really isn't like old PHP, composer, PSR's, The FIG folks, decent frameworks (Symfony in particular along with Laravel), huge numbers of usable libraries.
Yeah the language has issues but then a) what language doesn't b) with experience you can avoid them.
When you get down to it I only care about providing value whether that is to myself or my customers and they really don't care what language was used as long as it works.
> if you chose PHP (or worse program in it because it was what you inherited as well) you are a "lesser programmer".
If you choose php, I will assume that you.
1. Either is not aware of that php has a million gotchas that you need to avoid at every step. Take a look at the ever growing (!) list at /r/lolphp.
2. You don't see the significance of the aforementioned gotchas. For eg, you can show things like php's registerglobals to a newbie, and he will be impressed by how convenient it is. He won't see how bad it actually can be. This is not because he is a "lesser programmer", but due to a case of "unknown unknowns". Note that you can have 10 years of PHP experience and can still be like this.
> Also modern PHP really isn't like old PHP, composer, PSR's, The FIG....
These things does make a difference. But only on the surface, not deep down where it is really rotten.
Your post is a perfect example of what the author is referring to: stupid people in the community trying to make others feel inferior for programming in a certain technology. When it comes to PHP, such posts are inevitable (that's how I know PHP is actually a good, useful language). About the people who post them, I will assume that you:
1. Are incredibly stupid (register globals has been deprecated for years)
2. Are incredibly closed minded because you make comments like "These things does make a difference. But only on the surface, not deep down where it is really rotten"
3. Can't actually program in PHP and have not written large production apps in it
4. Probably can't actually program any language because you don't realize every single language has a million gotchas
My assumptions may be wrong, but it really doesn't matter. That's the problem with assumptions ... the damage is already done.
FWIW, PHP 4.x was completely awful for large and/or OOP codebases due to the totally insane copy-by-default semantics, the need to use &= perfectly at every call site that returned an instance of a class, and a handful of reference-counting bugs that caused interpreter crashes and still weren't fixed when 5.x matured.
It's definitely gotten better; I feel like a lot of people who swore off PHP forever are remembering version four.
There are objective differences between programming languages and it's reasonable to have strong opinions about the relative merits and demerits of each. Yes, it's toxic when people who have no real-world experience with a language or platform rant about it, because this tends to be useless bile. But that does't mean PHP is just as good as anything else.
If you only know a single programming language, you should have some inner doubts, no matter what that language is. This is healthy.
Of course languages are different. Some are better for some things than others. Choosing a language without knowledge of its tradeoffs is not a vary good idea.
The issue the parent is comments is judging someone based on their use of a language without knowing if that person has any knowledge of the tradeoffs is doing them a disservice. Spewing that judgement on the internet is actively harmful.
Calm down about "gotchas", please, it's already annoying . Every language has gotchas and trade offs. Modern PHP is really much superior than even early versions of PHP 5, not even talking about PHP 4. You can write very clean code in PHP and very smelly in C - it's all up to you.
I totally agree, and this is why I am quite angry with the "basic is bad for your brain" statement from Djiktra. I understand the sentiment, but the idea that starting with very basic "non-rigorous" language is not only a waste of time but will even hold you back make me lost several years on my programming career.
I see where he was coming from but I initially learnt BASIC (on a ZX-81) then moved to Pascal (Turbo Pascal on DOS) then Delphi with side branches into C and a some other languages.
These days I'm a web dev mostly using PHP and a lot of Python, I feel no need to justify my choices anymore, I could write a HTTP stack in C if I wanted to but I choose not to.
Ruby looks interesting, Go looks interesting, all this stuff is good stuff, I hate the attitude of "because X exists I must defend my choice of Y to the death", nothing is lost personally when someone else uses another language.
> it doesn't matter if it's vim or emacs or notepad
Yes! it matters if it's plain vanilla notepad, notepad++ would be better, you don't want to see someone else code opened in notepad, tabs and spaces and newlines will mixed like spaghetti.
That's certainly true. You learn by doing stuff. But PHP actually is a bad language, and the guy would be better off starting with something else.
Why use PHP for X years until you realize you need to move on, when you could start out with something you can still use even after that point? Even worse, he could get stuck using PHP because it's comfortable and he's used to dealing with its brokenness.
Well, now you know one who started out writing machine code. And I'll tell you, don't learn PHP and Rails is a joke and doesn't scale well. But any noob switching to Haskell to do a simple web app is equally insane.
Rails may not scale well, but it's incredibly fast for pumping out CRUD apps. I've seen noobies in Rails move much faster than Node.js projects. Likewise I'm sure someone has seen the opposite.
I'm not here to tell you Rails is better than alternatives, but as programmers we need stop being so scathing in our opinions about other languages or frameworks.
Has it ever occurred to you that somebody may have started learning PHP, or Ruby/Rails, or Perl, or Java, simply because that was the only viable option available to them within the trajectories of their lives that would allow them to make a living? I know people learning Ruby who out of economic necessity had to switch to PHP to land a good paying job. This is particulary true in smaller cities where opportunities are far more scarce.
Switching to PHP is not a choice that I would personally want to make, but I do not judge or think less of programmers who end up doing this when they're first starting out because they have to.
I find that those who start out with PHP cause they have to are working for companies who presume you need PHP and a database for anything related to the web but could never explain to you a technical reason for it.
We don't use a "web language" unless you include our use of javascript. We make custom sites using C cause we can and it does everything any other language does. We just might switch to Go cause it already contains the libraries we wrote for C years ago but Go makes it more universal to those outside our company.
PHP is perfect for newbies. It's flexible. Has lots of functions built in. Several mature frameworks available. It's in active development. Hugely popular so lots of people to ask. Easy to set up a dev environment. No need to learn server admin as almost all hosting services supports it. I could go on and on.
As someone who did a lot (and still does some) server-side development in PHP, I disagree about the newbies part, I think it's deceptive.
Doing PHP right is challenging, and for bigger apps it requires more insight into the internals of the server and the client than, say, a comparable application written for Ruby on Rails. PHP certainly gives you enough rope to hang yourself, and while I personally do enjoy the length of rope it gives me, it's also very clear that newbies have no chance of making the right decisions given this tool.
It's certainly convenient for getting started, but I think he wants to say that the drawbacks of choosing PHP outweigh the benefits.
I started out with Java, moved on to Python, and now I'm using Clojure. Every language & ecosystem -combination is some sort of trade-off, but one could reasonably make the case that Clojure is the best trade-off currently available.
Whatever he does, he should not get stuck using PHP because there are much better tools available.
Php is still a super effective lever for people starting out. It has some really bad technical warts but it has the shortest path to "shit's on screen" amongst web-based scripting languages.
>but it has the shortest path to "shit's on screen" amongst web-based scripting languages
Let us see. You follow the shortest path to make a service/web app. I use your service/app. You get hacked. (By the way, has the php community yet have a clue how the php.net site got hacked, like, I don't know, 2 years back?), I am fucked.
Who wins?
Instead, what if you put in the effort to actually educate yourself about the stuff you need to know before you put a service online? What if you actually use a language that is not a complete mine field. What if you actually use a language that will actually tell you that you are wrong, right to your face, instead of conveniently working half of the time?
And the funny thing is that it is not even the shortest path to "shit on screen". Check out how easy it is in python to put stuff on screen
The worst thing right now is people who are actually promoting php to new comers! My earlier comment was removed from here, because I told not to start programming careers with PHP.
I love PHP. I really do. Everyone knows about its flaws in syntax, function names, argument order, and so on, but as someone who learned PHP and used only it for years certain paradigms and programming styles it uses really messed me (and I think others) up when switching languages:
- arrays are hashmaps/multi-dimensional aka one-size fits all (no need for more complicated data structures)
- everything is single-request and single-process (no lifetime management or persistent state, lower need to worry about memory leaks, no threads or processes, no real timers or async)
For all of those who, like the OP, believe web dev isn't real programming:
- it is
- uploading WordPress isn't web development
I worked in embedded systems for a few years, and let me tell you, the quality of people is exactly the same as in web dev. They do pointer arithmetic all the time (way too much), we pass functions to functions all the time (way too much). They use ancient compilers and tools, we invent a new frontend build pipeline every week. They build systems that are so badly structured that they take a night to compile if you change one line. We willingly make WordPress plugins. And the list goes on.
I walked away there because I strongly prefer learning a new frontend build pipeline every week over using ancient compilers on piles of legacy code. In many ways, web dev is where the edge cuts. But neither is better or worse, and there's fools and geniuses everywhere.
The problem is that "web dev" covers such a wide range of roles. "Uploading WordPress isn't web development" is a subjective statement, and a lot of people who can only do CSS and very minor code copy/paste/tweak get to call themselves "web devs." This OP sounds like someone who got in a rung or two above "uploads WordPress" and has convinced himself he needs to transform into a full-fledged ninja programmer in order to shed the image of "low level web dev." And he thinks the path to that goal is to pick something smart sounding, like kernel/crypto/driver hacker, and become it. Unfortunately, this is a bit like a kid who's taken one guitar lesson deciding his career plan is to become Eddie Van Halen.
But it doesn't matter. What he needs to understand is that there's absolutely no shame whatsoever in the "web dev" role precisely because it covers so many different levels of ability. He sees his own skills as lacking and therefore concludes that his title is a title of shame, whereas what he should be thinking about is the fact that a lot of real bad-ass coders share that title. Get better at what you do and what you're interested in, rather than chasing what you think sounds cool to others but you have no actual interest in.
OP, I know a guy who spent a couple of decades as a C/asm bad-ass and was recently forced to learn some HTML/CSS/JS in order to put a web front-end on a project. He's completely hooked and I don't think he's going back. There literally is no level of expertise implied by the term "web dev."
I feel sad for the OP because he found himself in a trap of "my title matters". It doesn't. The only question that mattered was "do I like what I do? Do I learn and can I learn more? And most importantly, is it feeding the family?". Getting yes to those three (always try to start with the last first) is all one ever needs. Do that, stand tall, be proud. And he had that but lost it by wondering what image he projected onto the world.
I'm angry that people throw these destructive opinions like " oh poo poo. X isn't real work" out in life because not everyone can be strong enough to not doubt themselves.
It's always a good thing to ask oneself if the thoughts one projects to the rest of the world can serve the purpose of raising the quality of someone's life.
If you read this OP, shake yourself. Write down on 3 papers,
I Must Be Happy
I Must Be Stable
I Must Keep Learning
And on your table paste a smaller note.
If you are always moving forward, then you have no reason to be unhappy with who you are today.
This may sound hokem mantraish "oh that's a nice sentiment" advice, but our minds are more malleable than we know. Just like you can feed it destructive thoughts and ruin the good in your life, you can do the opposite and it will work.
CSS is underrated skill but experienced CSS developer has to know about:
- every browser quirk possible.
- various standard hacks to workaround these quirks
- preprocessors like Sass or Less
- tons of completely non-logical CSS rules (eg: `margin:
auto` will center only horizontally but not vertically )
- methodologies like BEM, OCSS or SMACSS
- CSS frameworks like Bootstrap or Foundation
- CSS specifity, z-index stacking rules etc.
- responsive web development
- basic JavaScript also can be helpful
etc.
And he/she has to be good at communication with graphic/ux designers and be super patient (`2px left, please`, `change color for 3% brighter, please`, `slow down this transition and insert 2px border` etc.) And good eye for details also is needed.
So I don't think that someone "who can only do CSS" is worse than programmer. I think the opposite is true: programming is pretty damn easy comparing to sitting all day and trying to randomly tweak CSSes to make website look as it was designed by graphic/ux designers.
This is the reason I hate writing CSS. I like programming though. Because programming it's a looot easier.
Programming is logical. You tell computer what to do and computer does it. If it does not, you debug and eventually you win. CSS is not logical so IMHO it's harder.
Hah. Not even possible anymore. Used to be before mobile, but as far as I can tell with mobile there is nobody who knows where all the bodies are buried.
Totally agree about the part where people who can do CSS and HTML and know that '.htaccess' is the file to configure stuff for your Wordpress website call themselves "web devs". And I think people from the engineering world look at those people ( since there is a lot of those people) and put a lot of hate on that title.
I know this for a fact because I know a few people that are calling themselves just that "web devs". And when ever I get into talking about anything more advanced then CSS and PHP if statments they get lost. Things like concurrency, microservices, encryption etc. Don't get me wrong, there is nothing wrong to be that person, everybody starts there, but you need to evolve.
Sure it is. I know people who make a living at setting up Wordpress. They do it very well, and they work hard at it. They do design work that I cannot hope to match. And they do it all without writing any more code than some HTML and CSS.
I'm not going to insult them by saying that they are not developing web sites. They absolutely are.
Coders do not own the label of "web developer". Because that is all it is -- a label.
Call yourself whatever you want to call yourself. Let others do the same.
FWIW, when people ask what I do, I no longer get specific. I just say, "I write software."
You are right, or course, in terms of semantic politeness. The OP is, however, referring to the difference between say a ruby developer versus someone who just writes html and css. If both are within the category of web developers, what are some names to distinguish the two?
Doctors are all doctors, but there is a difference between a family doctor and a neurosurgeon. Lawyers are all lawyers, but a patent attorney is not a criminal litigation specialist.
It is fine to have a generic term for a broad profession, then get more specific if and when it matters.
There would be. Because someone who only knows html and css has never really encountered an if-else statement in there entire lives. It's really hard for me to consider someone who doesn't know what an if-else statement to be a "programmer".
Perhaps, though, I can still refer to these people as "developers."
Parent didn't specify, but usually on the front-end. I would disagree that it's all that important, certainly not more important than being able to lay out a page and style it without it turning into a mess. I've cleaned up crappy CSS work before, the only real solution is to throw it out and start fresh.
At my company where I'm the back-end guy, our front-end guy does most of the Javascript, but he has to get my help whenever he has to do anything non-trivial. Only a few projects a year ever has him needing my assistance.
Most companies' Javascript needs should be similar. Every once in awhile there will be a marketing push wih non-trivial Javascript needs, most of the time they can get by with basic jQuery. Hide this element, show it when there's an event.
Unless you're working for a news agency, making Snowfall every month, I'd be surprised if the business actually did need more. Of course, if the front-end guy decides he has to learn React, well, I'd say, go ahead, knock yourself out. But don't kid yourself into believing it's really necessary.
I worked in embedded programming, systems programming and, now, web dev. No. The "quality of people" is not generally the same or, more specifically, you're less likely to find PHP coders among system developers.
You must be using 'PHP coders' as an insult quite regularly to not notice what you've literally said. Of course systems programmers use system programming languages rather than web programming languages.
If you don't mind my asking, why aren't you still doing embedded programming? I'm a web developer looking to move to embedded programming and I'm always curious to hear about why people made the opposite decision. :)
Not being aware of the parent poster's motives, I'll offer the exponentially larger job market for web development as a reasonable justification. While the vast bulk of organizations need web development done, embedded/systems programming is a relatively small niche.
Is it a relatively small niche, though? Anything that has a microcontroller needs embedded software written for it, which is a large and growing market of smart devices and doo dads. It's not as large as the web, but it's hardly a small niche.
The reason I'm interested in it is it's the opposite of the web. It requires small, deliberate programming as opposed to the bloat fest web programming has become. It's also physical, whereas web programming is entirely non-physical. After spending so much time in these digital worlds I've been a part of, I want to build real, physical things.
Seasons change, and so did I. You need not wonder why.
Things just fell that way. I had absolutely no interest whatsoever in programming for the web or the web at all. Then I was involved in an event that had no money and needed a web site. Which led to another. Long story short, own my own web dev company for 11 years and 10 employees and making more money than ever before.
Yeah, modern web development is actually really fucking hard mainly because you have to know so many different things. To build an application from scratch, and do it well, you have to have deep knowledge of, let's see...
* At least one server side language
* Probably a server side framework
* HTML
* CSS
* Maybe a preprocessor language like SASS or CoffeeScript
* SQL
* HTTP
* Probably a SCM like Git
* At least one server, which means the server software itself, like Apache or Nginx, the server for your language like phusion passenger, probably an OS that you're not familiar with
* a whole slew of build tools and the like relevant to whatever ecosystem you're in
And more shit I'm not thinking about (oh, all about images types and compression). And that's just basic stuff, not even considering setting up a database server or, heaven forbid, a cluster. Or anythging like redis, or a queuing system or redundant hardware.
That's not nearly a comprehensive list, but I think my point is made.
It's true that generally web dev is less mathy. I personally scratch that itch with graphics and game programming, but web dev is a hairy beast, so don't let anyone get you down about it.
DNS, Javascript, JSON, TLS and certificates, client side frameworks.
I always find it amazing that people recommend web programming to beginners. The amount of stuff you have to learn all at once as a programming beginner is really overwhelming when you are just writing a simple local program, never mind adding all the complexity of networking and deployment and server config and the half dozen web techs.
I think a lot of people forget just how overwhelming it is to first learn programming, either because it was so long ago for them, or because they learned it gradually as a kid. They take it for granted that everybody already understands DNS and CSS and server configuration and conclude that getting started on the web is easy because all you need to do is learn a bit of python/ruby/php/etc.
> The amount of stuff you have to learn all at once as a programming beginner is really overwhelming when you are just writing a simple local program, never mind adding all the complexity of networking and deployment and server config and the half dozen web techs.
You don't need to know more than HTML, CSS and PHP to "get started", and you can learn those one at a time, in that order - and once you know those 3 you can keep progressing, learning one thing at a time.
When I was younger and learning programming, I had an extremely hard time seeing what I could do with it. I was working with C and Python, which lends itself to simple command-line programs - but at the time I had no experience using command-line programs, so I had no idea what sort of thing I'd want them to do.
Things I had experience using, GUI programs and games, had a far higher barrier of entry and/or a much steeper learning curve. Now, I'd have a much easier time, I could separate the UI from the logic and write unit tests to have a sense of progression, but as a beginner, those things are out of reach.
The first really useful thing I wrote was an IRC bot in python, but even that was incredibly difficult. I had to work with sockets, threads, events, character sets... I don't even think I had a server to run it on, so I just ran it on my desktop machine that was on all the time anyway.
Compared to when I discovered PHP a few years later, it was immediately clear to me what I could do with it. I had experience using a lot of different websites, so there was a lot to draw inspiration from, and the barrier of entry was really low.
Now, the thing with web developers is that most of the Web developers I have worked with don't know anything of this in depth. They manage to get something done by copypasting together examples, tweaking code at random until it works for the single case they are trying manually, telling users to ignore certificate warnings, etc... and when the application finally crushes under its own impossibility, the consultants are called in.
The most beginner-friendly part about Web programming is in my opinion that you can get visible results quickly, especially if you can ignore the complexity of all the dependencies you are using.
Back when I was a kid, I could write "mode 2" in QBasic and immediately start drawing stuff on the screen. When more structure was needed, you could add it until you hit the limits of the language... which weren't very far. I don't know if there is anything as simple available today.
Edit: Reading other comments, Processing looks like a modern and much, much better language for the same use.
I think JS in the browser is a great way to start developing these days. The setup is close to zero (a script tag), the dev/build/deploy cycle amounts to saving the file and reloading the browser, and the language itself, while far from perfect, is quite typical of many widely used C-type languages. I'd say this is probably the optimal environment for someone looking to learn programming.
On the server, something like PHP is so ubiquitous, that even though the dev/build/deploy cycle is a little more complicated because it involves a server, it's still a good candidate. With preset stacks like XAMPP/MAMP, all the user has to do is write some code and upload the file to the right place and reload their browser. I think that can be manged. True, the beginner will not know about servers and things like that initially, but that knowledge is not essential or even important to starting out.
I think the big reason for suggesting web development to beginners is interpreters and their ecosystem. Learning an interpreted language is much easier, IMO, for beginners than JIT or AOT compiled languages because the tool chains dev/build/deploy are simpler and many times invisible to the user. Web development does use a lot of interpreted languages. Finally, getting real results on the screen is huge. Showing people they can build real things with only a few lines of code is very powerful and something that is much more powerful in a graphical web environment than on the command line. In web development, the product is graphical by nature, so that is also a huge plus.
>I think the big reason for suggesting web development to beginners is interpreters and their ecosystem. Learning an interpreted language is much easier, IMO, for beginners than JIT or AOT compiled languages because the tool chains dev/build/deploy are simpler and many times invisible to the user.
If you want to do web dev in python then you need a local python environment setup (which is actually trivial on desktop Linux or OS X), and that is no different from somebody using python for local programming. Except their code will be far simpler since they can just read standard input and write to standard output, without having to worry about parsing https requests and constructing valid HTML just so that the results of their basic fizzbuzz code is visible. And they won't need to worry about deploying a server, setting up the domain names, setting up a web server and so on.
Setting up a server is also more intimidating because you move into the world of things costing real money and your mistakes being publicly visible. If there's bugs in my small local programs that I write to educate myself then nothing happens the fact majority of the time (rm -rf style bugs can happen of course). If I screw up deploying my server, or do something insecure in php etc, then there are public facing consequences of that (my site gets pwned).
Setting up something like XAMPP is not as friction filled as setting up something like a *NIX development / production environment. In some cases you could get away with using shared hosting or spinning up a simple DigitalOcean LEMP box to some degree.
On another note:
I personally prefer to recommend Python due to a lot less friction, and semesters of helping students with learning C as their first language: "Don't forget the semicolon, don't forget the parenthesis, don't forget the curly brace." All things Python lacks, and with a good editor, their white spacing would be automatically formatted, and at least when they get to their next language they format their code a lot nicer. But that's just my experience helping out students.
A lot of wonderful languages are perfect for first time programming languages. One of our teachers uses Processing for his Intro to Programming course. It's so easy to just download and install Processing, compared to downloading and setting up Java (at least in Windows).
Some people argue web developers have it harder than iOS developers. In fact, good full-stack web developers arguably need learn more about technologies in a faster period of time than many other specialties within software.
Why? Because the web, and the skills needed to make a competitive web app, evolve extremely quickly. Just on the Javascript side, in one year, you're learning Prototype or jQuery, the next year you're learning Angular, then React, etc. Browser standards change -- wildly, as do the frameworks used to build things. One day its SQL, the other day its NoSQL. One day its Bootstrap, next day its material design.
In comparison Native iOS developers have had an evolving but relatively consistent set of API's from Apple to learn for iOS / Objective-C to stretch into useful skills for nearly 10+ years now.
Where do you think the most successful web apps (like Slack recently) are emerging? From the SV echo chamber.
To be a talented full-stack web application developer for a successful consumer facing app, you sort of need to have an obsession with UI/UX design trends. Finished web apps that delight customers have an attention to detail that put them over the edge into the realm of being successful.
What you need to learn to become a top web app developer is actually punishingly brutal. People now expect all web apps to operate with the smoothness of having AJAX everywhere that you see with apps like Youtube, Gmail and Facebook. Web app developers who can actually build web apps to that level of quality are extremely valuable.
Web development is not easy if you really specialize in it. By that I mean people who have really accumulated best practices and knowledge over common core problems of the web. These are the people who within a month can return you an app fully loaded with user accounts, multi-tenancy, notifications, emails, subscriptions, the ability to upload documents, search, credit card payments, google maps, API gateways, chats etc.
In addition to having programming chops, a lot of their value actually comes from having spent time collecting good "widgets" of useful software they can use for new projects. These "widgets" allow them to build impressive experiences quickly. Examples include having an opinion about what a "joyride tour" javascript widget looks like, having an opinion about what makes a good date-time picker, mastering form validation, -- the list is nearly endless, but they all come down to the person having an informed opinion about what UI/UX paradigms are best from a human-computer interaction perspective, and knowing that these paradigms change quickly. A person who I would call an elite (front-end) web developer is somebody who builds their own widgets frequently just to see what works.
Such sideskills of a web developer only come from constant learning. In my opinion it is one of the most brutal sectors of software in terms of how quickly your skills fall out of date and how much you constantly need to be learning in order to remain competitive.
I wasn't making any value judgment on web development's difficulty. Bootstrap versus material design isn't some top-notch innovation like you portray it. It's a bikeshed issue. Most people use Bootstrap as a formulaic placeholder, and material design is a Google trend. It isn't any more relevant to the web development community at large than Microsoft's Metro is.
NoSQL is ancient, and the value of NoSQL is in specialized data models and workloads. Modern SQL databases remain general supersets in terms of functionality, but the value of NoSQL is tuning features for data structured outside the relational model. It's by no means a generic tool, nor necessarily innovative, as you portray it.
AJAX everywhere has been going on for quite a while. It's not necessarily relevant for all web-based CRUD and no, it's not expected universally. The boring truth is that most web apps are still best suited to standard server-side pages with more dynamic content sinks for certain parts of the app (though there's been a concerted effort to redefine "web app" as SPA). HTTP is a dumb file server, at the end of the day. Rest is very flimsy client magic.
Finally, there's nothing special about Slack. It's successful. It's by no means interesting.
Fair point, I bring Bootstrap up as an example of how frequently the actual frameworks relied on to build things on the web change. A better example of is the endless paradigms popping up to handle highly interactive javascript.
RE: NoSQL and SQL, I agree and I understand the nuance (my go-to database is PostgreSQL), I'm just pointing it out as "another thing" web developers need to understand.
And that's the point I was trying to make. When it comes to how many "other things" web developers must constantly be learning, I actually think developers in iOS or at the lower-level sometimes have things easier despite the stereotypes about web development being easy.
RE: Slack - Slack is interesting because it combines many elements of traditional web app design, and succeeds simply by executing on those elements extremely well. I believe web developers (particularly front-end ones) could learn a lot by studying how polished Slack's design and interactivity is.
When it comes to how many "other things" web developers must constantly be learning
The reason for learning many of these "other things" is precisely because of your limitations to the confines of the browser's VM, where all superior OS APIs must be poorly reimplemented (Web Workers, local/session storage, WebSockets, WebAudio, the file API, etc.) to get around the fact that the web was designed as a file server for static documents. In the process, the same-origin policy was gutted through cross-origin resource sharing and cross-domain messaging.
These same limitations partly inspire the massive framework churn, most of which are formulaic.
You're completely right that the problem comes from being trapped inside the browser's VM. Anyone building a highly interactive single page Javascript app definitely has their work cut out for them.
It's funny, but in some ways web development has actually regressed in terms of difficultly. 10 years ago before its death, browser plugins like Flash actually made a lot of inroads towards making it easier to build highly interactive web experiences.
The current shift towards Javascript has arguably left developers with a weaker set of tools for producing dynamic experiences than they had with Flash even if Flash really did need to die.
Don't forget to mention time budgets. If I were making a desktop application for windows using the standard windows libraries, my clients would expect it to take a while and wouldn't even expect to see anything for a few weeks.
In web development doing the same app, I have far less consistent tools and loads of square peg problems, yet the client believes development should be seeing a demo in a couple days and a finished product a little after that.
Learning all of that is hard and the market is booming, so I'm in huge demand as a good JS developer. Even with the demand, the supply of good devs is short because of that barrier of entry. Programming noobs get eaten alive and most devs with experience in more traditional fields take a lot more time to adjust than they think the will going into the web profession. JS isn't an easy language to learn (especially after you've been programming in a traditional C-like language for years).
I'd say that this state is a silver lining to the learning problem, but because of the perception of web development barrier of entry and the swath of noobs, the market in general still doesn't pay equal to the real demand. I'm lucky enough to work at a company that respects JS devs, but when I worked as a contractor, I passed on loads of jobs and job offers (even from fairly large companies) because they had no idea what a good web developer knows/does let alone how to tell a good dev apart from a poor one.
Most of these companies go on to hire inexperienced devs and paying a huge price. When I went back to fix some of these issues later (I was too expensive for them until they started contacting other experienced devs/shops looking for someone to fix everything). Most of the good devs aren't going to go down the trial by fire path in order to get a worse-paying job (and let's face it, the companies that pay well know that only a year or two of JS experience is a dealbreaker despite an excellent resume with 20 years as a C++ programmer).
Like many here, I don't believe in the OP's premise that web development isn't real programming, but likewise, I really hate it too! When I have to do it, I much prefer getting involved with the backend-side of things; I loathe frontend development. My main reasons being:
1. The framework churn at this point is beyond ridiculous. In my last/current project, I just gave up and wrote everything by hand with a bit of jQuery for DOM manipulation. It may not be pretty, it may not scale, but it actually works, it took me maybe a day-and-a-half (rather than the weeks of time I've lost experimenting with Framework X) and it will be tractable when I (or some other developer) comes back to it in the future.
2. Ultimately, by in large, web development is just making CRUD applications. Having to go through all that pain and not having much to show for it at the end (in terms of novelty) is kind of soul destroying! When one writes, say, a command line tool, that's ultimately more about manipulation. In my mind, doing creative things with data is much more interesting than simply providing a means to store it.
On 1) I choose Knockout.js a few years ago and I still use it for everything (they have proven backwards compatibility, they've been around a while, the core devs are friendly, it's "modern" (3.3 added components and such) and it plays well with others (jQuery particulary, you can wrap jquery plugins in 15-20 lines of code and lo-dash), it's also 'just' MVVM so it doesn't impose any structure you don't really need, checkout https://vimeo.com/97519516 for what people do with it.
2) Agree on every point, 80% of the stuff I do day to day could have been done with Delphi 5 by dragging two components onto a canvas and connecting a data source and then going for coffee, We have the ability to render 3D scenes in the browser but paginating through a datagrid is still none-standard.
Web development is real software development. The people who say or think otherwise usually just don't know any better.
That being said, there are different tiers of software development (including web development) in general. Most developers are actually abysmal at architecting good software. This might be down to a number of things - time pressure, lack of experience, lack of skill, apathy, "life happens" etc.
Anyway my point is, abysmal software is everywhere. Thankfully, customers don't mind. If your software is important, you'll write tests.
If your software is important, you'll write tests.
If your software is REALLY important you'll use a language that stacks the deck in your favour, one that's amenable to static analysis and can stop you doing stupid stuff like mixing units at compile time. Weirdly, programmers are highly resistant to working like this.
Most often the technology isn't the most important thing in "web development". Understanding the customers needs (often better than the customer) and implementing them is the point.
Of course technology is important but just using sane (and proven) technologies that all on the team understand is often the best way forward. Wery seldom the problem with custom business apps is the technology or "webscale" issues etc which get all the attention on eg. HN. When creating apps which will be usen for maybe 10+ years using the most hip language or framework isn't so smart when considering maintainability. Eg. Java/PHP/mysql are all etremely well understood and work wery well.
I've been doing this kind of development for about 15 years and not once has an application eg. needed to be clustered in any way for performance reasons (for HA reasons maybe).
There are a couple of problems that I see with the entire premise behind this article.
1. Web development can be challenging. Writing a simple blog or wiki system in PHP might be "easy", but creating a wordpress.com or wikipedia.org is a whole different ballgame. Latency, scalability, architecture, high availability, manageability, security - the challenges are endless.
2. I don't understand why software developers tend to value the "difficulty" of the technology used in a product over the utility of the final product to end customers. Creating a web app in PHP for sharing daily tidbits in your friends' lives may not be as challenging as writing a compiler for a functional language like Haskell, but its end value may far eclipse that of the latter. Facebook and Twitter after all started as fairly simple applications but are multi-billion dollar companies now. I would even say that there is a certain unix-like elegance in using the easiest, simplest technologies to create the maximum returns in terms of utility to humans. And that, IMO, is far from being a "brain-dead" skill.
The article is about people who use things like wordpress and maybe write little plugins for them, rather than designing the frameworks in the first place. Those types of work are, undeniably, very different, one common analogy being the difference between car mechanics and automotive engineers. I don't see the author's work as brain-dead (neither is the work of car mechanics), and the author clearly implies he doesn't either. But he is surrounded by people that sneer at it -- that certainly seems believable to me.
I worked several years in my early programming career in a big software company who developed mission critical software: traffic control software. You think they are bad ass programmers? You are totally wrong... the system (btw it was often Java or C based) we programmed on was so complicated that you need at least half of year day to day experience to know what you are doing there. And most frustrating part: There was no inner beauty in this beast! At the end you see a lot of ancient stupid code with the same stupid and dangerous ducktape as everywhere else. And the programmers there are no bad ass elite programmers... I would even say that many of them are below average young programmers because they worked several decades in their highly specialized area and have no clue about other technology (they will never be e.g. web developers). The most significant difference is that the whole building process: First there is a lot and a lot of specification (this sucks so much), then they adapt one ancient industrial system to this specification (this sucks maybe even more) and to get this thing ready for mission critical usage they do more than everywhere else Quality Assurance: Test, evaluation, verification, test, evaluation, test, evaluation, test, test, test... this sucks too. So after maybe 3-4 years they are ready and ship... and guess what... it is tested again. I'm happy I left this area... they are also very strict with software you could use, so the innovation process is F* slow there.
My advice: Change your inner attitude and thinking about programming. And the most important part: Do not care about what people think... only care about yourself. I've seen so many programmers (and I hate this attitude) who think they are so much more bad ass because they program in this and this language or area... so what? And why? I don't care and I do not need to compare myself with them.
A web developer wears many different hats. These days you have to be a real polymath to make really beautiful and functional websites. I never enjoyed the limiting belief that web development is some symphony of JS+HTML+CSS in the browser. It's more than that, and it is multi disciplined. Elements of WebPerf, Browser Engine quirks, progressive enhancement, A11Y, Design, UX, build scripts, templates, design patterns, server backend, frontend, bothend, mobile/handheld, analytics, rendering engines, etc
The list could go on for some length.
Not to mention the various principles borrowed from 'real' software engineering canon, like D.R.Y, K.I.S.S, etc.
In terms of proficiency and confidence, you should look up the Dunning–Kruger effect
I've always been a fan of collecting money for solving problems and letting others worry about whether what I'm doing qualifies as "real" programming. Knowing how to listen to potential clients has gotten me a lot further than worrying whether PHP is a real programming language.
The motivation behind developers dissing each other for their chosen field of work and their tools is absolutely puzzling, and it does real harm. Nobody would assert that printf("hello world!"); epitomizes systems programming, yet print($foo); is apparently considered synonymous with web development and lowest of the unspeakable arts.
Inept programming can be found all over the place. A newbie program doesn't magically get better because it's a kernel module written in C, anymore than it gets magically worse because it's a guestbook script written in PHP. The astonishing thing is this goes arbitrarily deep in the tech taxonomy tree: Ruby on Rails is considered a pro-grade environment, even though it's partially focused on mitigating newbie mistakes. PHP is considered a beginner-grade toy, despite the comparatively vast expertise one needs to write correct code in it. The web is a stupendously complex thing to write software for, there is nothing low or trivial about it.
When I was relatively young in the late nineties, my contact to other programmers was extremely limited. I was working at an ad agency, where I developed and maintained an in-house DSL for web programming. When the second full-time developer was hired, their first move was to diss pretty much everything I had made. "How can you write a web framework without regex?" "A document-based database? Abomination!" "A stateless server? That's crazy, why didn't you write a persistent app server?" "A real programmer uses Emacs"
Over the years, this mode of interaction still exists. Most people avoid it by hanging out only with developers who use the exact same stack they do, and when the winds shift they all switch together and pretend the old tech never existed. We had the chance, as a programmer subculture, to leave this ridiculous and arbitrary in-group/out-group stuff behind, but instead we embraced it and turned it up to eleven.
> PHP is considered a beginner-grade toy, despite the comparatively vast expertise one needs to write correct code in it.
As someone who's built a career on (mostly) writing PHP, this this this. It is indeed incredibly easy to write "working", terrible, insecure PHP. Honestly, people who write garbage PHP would write garbage rails/python/node too, because the errors fall into a few buckets:
1. Not using a framework's API/reimplementing boilerplate poorly.
2. Not paying attention to user-generated input (escaping, etc).
3. Not using best practices for major tasks (e.g., manually mysql_connect()'ing instead of using PDO)
4. Failures in logic ("brain farts").
These problems are the same in any language. If you CBA to pay attention to the basics in PHP, you won't do it in rails either. Blame the programmer, not the language.
The counterargument is that some languages won't let you make these mistakes, but the counter-counter is that those people would make those mistakes if they could, which is not really an improvement IMO.
I think the real counter argument would be: why would you use a language where it's easy to screw up in subtle ways as opposed to a language that makes it much harder to screw up, if all else is roughly equal. PHP is a minefield in ways most other languages aren't. Part of writing fewer bugs is setting yourself up with tools and practices that make writing bugs harder.
I've definitely had these feelings too - sometimes still do (the feeling of struggling with a problem i assumed should be easy). I also tend to naturally spread out my knowledge a little too thin on various projects and not really make meaningful progress on any of them.
Two things have helped for me - one is to have a useful project in mind for the thing you are learning, so you have a payoff at the end. The other is digging into the details of the thing to really understand the subject - and make a mental note that you're implicitly committing to struggle and frustration in exchange for the reward of knowledge. If you aren't willing to struggle you won't get very far in any subject. It's great to have the initial interest/spark, but perseverance is what really changes you as a programmer.
I think, as a community, we all have to make a mental note, that this shit is tough but with struggle comes the reward. We could learn a lot from pro athletes. Our general rule that we are "lazy" is so bad. You should not be lazy. Do the damn thing. It will be hard, but you are doing it for a reward.
It is super hard to remember that fact, when you are deep down in Node.js trying to figure out how streaming and event loop goes on. But thats where notes and big posters come in :)
Understanding the Subject -- I think this better describes understanding the problem you're trying to solve. After that, solving it in any language, while not trivial, is still far easier.
Also one of the question the OP has not answered, and that I've seen a lot of people asking themselves is
How one does leave web development.
I'm graduated from an engineering school, were most of my classmates were doing smallwebsites/wordpress plugins etc. on their freetime for the easy money (as anyway it's very rare, if not impossible, to find a freelance job as a student on embedded system)
To the point that when they're graduated, as they've accumulated experience in web development, they find a job in it. And later they get defined as a "php developer" , though we did learn about data structures etc.
Then HR will discard your resume when you apply for a embed system or other non-php related job, because you got nothing marked with it on your past experiences (even if you had worked on some arduino on your freetime).
So how one does the conversion ?
* create/participate to open source projects in the field you're interested ?
* try hard to find a job that involve both, so that internally you can try to make the transition ?
* remove the PHP experiences from your CV so that you're just a "junior"?
This is a hard question. I managed to make the switch myself a few months ago by dumb luck. A co-worker of mine designed a piece of hardware that caught some attention in local tech scene, and a consumer electronics company that was looking for consultants interviewed him and some of his co-workers. I passed, and now I'm some kind of embedded developer.
I have been in a job that was supposed to include both. It was a complete bait and switch deal, in the end most that I did was writing non-web integration code and tests. Though I didn't get much experience from actually implementing their algorithms, I knew enough of them and linear algebra to be recruited at a graphics middleware company... unfortunately that didn't last.
The CV doesn't really matter. After the graphics company had let me go, I had zero Web experience and was still hired for a backend CRUD job.
I have been in the business for 15 years now.I started as the guy that did the table-and-frameset static websites, and if I look back now there's a myriad of things that I had to learn and 75% of that I have probably forgotten again.
The myriad of protocols, languages, frameworks, toolkits that you have to keep up to date with. Fashions in what the devs think is cool and what the customers ask for.
The most amazing thing to me however is what the browser and web technology now allow you to do. The way I see it, browsers are not document viewers anymore, they are akin to operating systems, and the web dev skills you have let you make awesome stuff you'd never dream of 10 years ago.
I have been tinkering with packaged chrome apps and UPNP, and in my mind it's nuts that I can do this, me, the humble web developer.
So to echo one of the sibling posts here: Just go and build something. Doesn't matter what. In the end what matters is whether people use your software or not. If you blogged and it made a difference, don't let anybody rubbish that for you. You're already a cut above the rest.
Web development is hard for all the wrong reasons. There are so many layers of bad, half-broken stuff to deal with, encapsulated in new, half-broken stuff. Worse, it has fads. Sign: "It has been [0] days since the last new Javascript framework." Web developers must run very hard to stay in the same place.
It's hard to get excited about this, when in the end, the result is usually a web page which could have been displayed faster in HTML 3.2.
Your attitude is exactly the part of the problem described in the post. For me, web development with all its exaggerated quirks and fast evolution of JavaScript frameworks is very exciting.
Exciting in the sense that every project you do is either your first in a particular framework, or involves maintaining or adding features to a project that was someone's first use of it... This is a horrible way to work.
If we disregard "It's hard to get excited about this," which is just parent's subjective opinion, I think it's a plausible criticism of the field. Do you think it is wrong, and could you back it up?
Yes, I can back up that this "plausible criticism of the industry" has no roots in reality whatsoever.
>Sign: "It has been [0] days since the last new Javascript framework." Web developers must run very hard to stay in the same place.
We are talking about front end frameworks here, right?
Ok, here is data for usage of front-end frameworks for a top million websites:
Angular is used on 0.4% [0]
Ember is used on <0.1% [1]
React is used on <0.1% [2]
jQuery is used on 63% [3]
What conclusions are evident from these numbers? Modern "[0] days since..." JavaScript frameworks are used on the minuscule number of websites and therefore, empirically, an absolute majority of web developers must NOT run very hard to stay in the same place.
Even Backbone which is a reaaally old framework in JavaScript world is used only on 1.1%[4] of top websites.
It is a game I play, to look at a website and say, what does this do that we couldn't have done on an IBM 3270 terminal, in FORTRAN? Or on the Amiga?
The ONLY difference in the modern world to back then is the ubiquitous bandwidth and the cheap hardware that connects to it. Everything Amazon or Facebook does, you could have done on that old system, if it could be accelerated to run on modern hardware. Software just goes round and round in circles reinventing the wheel with different buzzwords. Everyone wants to do "frameworks" and leave "solving actual problems" to someone else...
In intellectual pursuits like programming, it is easy to fall into the trap of thinking that only intellectually hard things are worthwhile. Which in turn leads us to think of an intellectual ladder with mathematics at the top. This causes us to disregard the creativity and effort required to produce useful things (such as websites) even when no intellectually hard problems need to be solved. I think this is a toxic frame of mind for anyone who is not a mathematician.
I'm constantly impressed by people who have true, in-depth knowledge of any space.
If you're world class at HTML / CSS, know the specs intimately, know the differences and quirks in rendering engines and can explain why IE8 renders a selector differently -- that's impressive. That's also very valuable.
That wouldn't be considered real programming by a lot of folks. Who cares.
I've found that going broad is fun, going deep is hard. If you find yourself seeking challenges, there's often little need to branch out. If you dig deeper, you'll run into highly technical, hard problems really quickly. You also gain expertise few people have.
If you generate value for an organisation by making a Web site work for them then I think you are a programmer!
By the same token, if someone could lose business/data as a consequence of a serious software error on a system you have implemented, then you are certainly a programmer and you have a lot of responsibility.
To the person who authored this piece of text that will apply in X-odd decades from now, I hope you inspire every coder in 2035 who is "starting out programming" to say:
Fuck your functional, static, super-fast, super-optimum, super-niche, super-scalable, super-everything language that only 64 other people in the world are using, that barely has any auth wrappers because your bus-factor of 2 prevents you from doing anything else except optimizing your compiler to be "almost as fast as C". I will learn my shit-hole language that the dickwards at GooFaceZon and the asswires at redundant CS colleges refer to as "a mistake of a programming language" because frankly ...
My shit-hole language will do many important things, among others:
- Make me productive
- Pay my fucking bills
- Allow me to learn, because I understand shit at this level, was not born a savant and don't dream in code (whatever the fuck that is)
- Allow me to live beyond the screen, because having a family, going outside and letting the sun touch your skin sometimes is good
So fuck it all, and fuck it all true and well. If COBOL and VB6 aren't dead, long live WordPress!
Imo web development in the open source field is a lot more complex than say developing in a strictly Java or .NET environment.
Let's face it, most .NET or Java programmers are building some kind of CRUD app too.
Over 10 years ago i have started with PHP and Perl, going from horrible spaghetti code to full fledged Symfon2 apps that use abstraction layer upon abstraction layer. I have written NodeJS servers that analyze event streams of hundreds of servers and push realtime statistics to AngularJS frontend apps. These days i am building apps in React and am exited for the prospect of React Native. I have also worked in C# and Unity3D for game programming and built realtime multiplayer 3D action games. At heart, i consider myself a programmer who uses the right tool for the job and i work primarily on the web. I am still proud of it because it's one of the most vibrant fields of tech to be in and companies pay good money for my work.
Even though i did lots of PHP in my life, i never ever touched the code of Wordpress or Joomla or similar though.
I've been affected by this recently. I used to focus on the outcome, on real problems solved; on value created, to help people - not impress them. An outcome/engineering approach focusing on ends, not means (maintainability etc is a result, though logically secondary to the thing itself).
Helping people is way more satisfying than impressing them.
For example, youtube and facebook have helped many people, even though they use PHP. And PHP has helped a lot of people, by being simple and effective (I've always thought templates are a simple but brilliant idea).
As a learning method, it's not about getting a comprehensive, deep understanding, but actually doing something useful, and just learning what you need for that. You get satisfaction along the way, and the pieces come together, giving you a lead for comprehensive understanding - if needed.
[ PS Personally I got turned off webdev years ago by tedious browser-compatibility - though I understand that's long been solved by platforms like jquery etc. Also, it needs more visual design aptitude than I have... ]
I just have a small comment about the difference between professionals that went into the profession via the front door, college, certs, etc. And those the went into though the back door, learned on their own because someone somehow decided to pay them. Generally the latter are people that get some satisfaction out of the trade. But there a lot of professionals that went to school to become X and found they hated it once they got out. Yet they owe all this money, and they can't see any other way to earn the money they are used to. These people are usually very unhappy people.
The others that are generally happy with what they do, and aren't the type of people that like playing power and status games with what they see as the lesser races of programmer.
To the point, if you find a career you like, that's like hitting a home run in life. Letting unhappy people convince you to give that up is really terrible.
This author wrote, "PHP was a terrible language, and PHP developers were terrible programmers. JavaScript was a terrible language, and JS developers couldn't perform asymptotic analysis to save their life. Web developers don't have degrees and it shows in their code. Drupal/Wordpress developers are an absolute joke."
What a crock! What a good reason to stay away from online forums like reddit! The userface of any software, done well, is painstaking and valuable work. It's a poor craftsman who blames his own tools. It's a freakin' troll who blames other peoples' tools.
This has been going on since the beginning of the computer industry. Real mean program in machine language: assemblers are for wimps. COBOL? feh.
This is nonsense. By this reasoning, Michaelangelo was incompetent because of his choice of painting materials.
I hope Joel's article will be seen by lots of people, and that our trade can mature.
There is a simple path to the professional satisfaction for programmers who work primarily with web development. Learn a little marketing, a little entrepreneurship and make your own side projects. For fun, profit or social good. None of the arrogance or denigration won't touch you then.
Funny, coming from an electronics background, I can understand the stack down to the metal. But from my point of view, the further away from the metal you are, the further you are away from monkey work.
The author could not have flipped things more on its head to me. It's ALL monkey work, in that it's a lot of tedious glue work and calculations. Except the higher level you are, the easier it is to be executing your vision, rather than meeting some spec.
You are a lot more likely to come up with a webapp business idea, than you are going to have the opportunity to design the next CPU or what not.
Business matters aside, I also find coding challenges to be more like puzzles, whereas circuits to be like a stack of math problems. If you don't like being a code monkey try being a (used) human calculator!
It is easy to write shitty code as a web developer and get something to work, however unmaintainably and unprofessionally. That doesn't make it any easier to write excellent, clean, and extensible code. In fact, it makes it harder because you're more likely to find yourself in an organization which has been able to survive without being able to write clean and professional code.
Branching out into other domains can give you insights if you find them interesting, but if you do in fact care about web development, focus on taking pride in what you build as a web developer.
It's sad some people tend to think as being a programmer is all about programming. You have to focus on the goal: the product that you are creating. Then you decide what's the best tool to make this product, and it doesn't matter what field that belongs to. If it helps you make the product you want to make, then it's good.
Of course you might get bored creating a certain product at some point because it's become too easy for you. But as long as you don't reach that point, don't rush yourself. I would say.
In the end, language choice is up to your employer for most jobs. Don't sweat it.
Back in the 80s when I was in uni, the only job I could get in the area was in a language called dBASE (later Clipper). Nothing like the "real" languages we learned in school. BUT, we got stuff done, quickly, to allow entry and reporting against the data kept on the "real computers". A few years later, after graduation, at that job, I got to see a "C" program somebody wrote to tie into one of the systems I did to speed up a batch process, as I needed to fix a few things in it. It was a real enlightenment to see how bad the code was (in some ways). I didn't feel so bad about what I did after being able to fix this "expert" code.
Don't let the bastards get you down, as they say.
PS - I've been a Java programmer for the last decade, but I'm doing Angular on an overhaul project at my latest job. I like Javascript (feels like the rich, "local", UI stuff I did in the 80s, all over again), but CSS is hard. Don't feel bad about "only" knowing web page stuff.
and ... many other posters already mentioned the primary importance of simply earning a living, honestly.
Damn. The thing is, web programming is real programming. I work with low level system security components, and before that worked on medical software, i.e. what the author considers "real programming". However, during the IE 6.0 era I also did multiple corporate internal web UIs with PHP, ASP and JS, and projects on those platforms can be just as demanding as high performance low level C projects.
Seems a little bit rash to differentiate web development from "real programming" with such a binary lens.
There are both good and bad web developers, just as there are software engineers.
If one wants to learn more about software engineering then of course there is nothing wrong with that, however it strikes me as odd to pursue it solely for the "higher prestige" that it carries amongst the programming forums.
I can relate a bit to this article. Although, I never find myself "hating" what I do per se, but I definitely find myself looking for something more "difficult". I've done the same as the OP, bought C books, read a few pages, wrote some example apps, etc. But I quickly lose interest.
I work as a "software engineer" by day, which is basically a glorified title for a guy who writes a ton of JavaScript. But I like to put a positive spin as to why this profession is so easy: Maybe it's easy because I've been doing it for so long. Maybe it's easy because I really know what I'm doing.
I find it important to always challenge yourself and continue learning. Honestly the JavaScript community is great for that, hell every couple of days there is some new framework to learn.
Overall, it is sad how down the OP is on his self, I hope he can find his way again. Programming is one of the most enjoyable experiences I have ever had, and I wish everyone could see that same enjoyment.
I like web development but have to admit I do look down a little on people who are able only to click some buttons and get WordPress running and then people consider them "programmers".
Likewise, people who are able to drag some stuff around in MS Access and are considered "programers".
It's not necessarily the amount of skill and effort involved (although admittedly that is part of it), it's the fact that, in my experience, soon enough these "click and drag" type systems usually break. When they do, the button clickers often don't have the skills to fix them. This is, in my opinion, the refining fire that separates "programmers" from "Next" clicking hacks. And often it would have been, in total, more efficient just to learn a bit of real programming in the first place rather than to fix the messes created by "easy" systems. I'm not complaining because I've made money fixing problems button clicking "programmers" created but couldn't fix. In MS Access, in WordPress, in Sharepoint, in Lotus Approach, etc.
It's better to take the time to learn how to code. PHP isn't my preference, there are better languages, but it's probably OK. Oh, and I don't worry about what people think of web developers. Their opinion doesn't really matter. But button clickers as opposed to coders... there is a real difference and it shows up soon enough.
Last point, OP messed up by ordering a bunch of books. He should have ordered just one. Don't try to drink from a fire hose. You will get knocked on your ass and all wet, and you won't even get your drink. Also, besides learning, you have to keep producing. Even if it's boring and some people don't respect you. A certain level of income take precedence to learning. If you don't have it then the learning is done because you can't fund it. So... priorities.
I wish you nothing but the best in your journey back to confidence. I have been there too and occasionally my mind gets tripped in the same thoughts again, but I realized that web dev is the only thing that I know that let me builds what I want to build. It might be easy for some but it is effective for me.
I don't know that I agree with the article's premise... while I feel for the author, and even the referenced poster in reddit... I have to say that I love web development. I started out very early on in the Web, I wanted to create interfaces and applications that people used. I'd spent time on BBSes before/since, and just want to create a usable system.
I started out with design work. I learned JS because I wanted to accomplish a given task... I read a big book (JavaScript Bible, 1st edition iirc), over a weekend, and applied that when I got back to work monday... over time, I became more interested in the backend... SQL, livescript, (now classic) ASP, VB5/6/COM/DCOM, and then C# when it came out.
The .com bust, while painful was actually a great learning experience for me. I knew C# was the next step out from VBScript/ASP, but I was unemployed... I managed to get the cheapest/complete book on C#, and without VS was stuck using the command line interfaces. It was a really interesting, and challenging experience. By the time I finally got to use VS2003, I really didn't care for it, but VS2005 was decent.
Since then I've dabbled in C/C++, F#, Perl, Python, Ruby and a few others... I've had Go on my radar for a while, but haven't had a use case for actually trying it yet. I've also spent the past 4-5 years advocating for NodeJS usage. I find the development paradigm it offers, and the constructs you can acheive (more functional composition, less classes) are closer to my mindset.
In the end I like knowing how different softwares work together, how the data is stored... to some extent, I don't really want to know the details down to memory access and drivers. At this point in my life, I have an understanding conceptually, but practically I don't care so much. I now know enough to not even hit certain bottlenecks, while not prematurely optimizing for others.
It's something that simply comes from experience and understanding that you can't know everything, and just trying to continue to learn and try new things. I get imposter syndrom like anyone else, but I understand that it's all part of the process.
In re: the vast number of available programming languages... not really a new problem. I've always been amused by the "Tower of Babel" illustration on the cover of Jean Sammet's 1969 book, Programming Languages: History and Fundamentals.
I am a Python/Django developer. I love my learning and work in Django web development.
Aren't you injecting me a negative thoughts?
From web development, try to go for scaling multiple architecture machines, or go for big data processing or go for Arudino, you have plenty to explore..
I personally feel, there is nothing wrong to switch the work, as long as you have the desire to obtain the specific label in that area and dedicating yourself for it.
One reason for this is also that there are not many intermediate books on web dev. There are beginner books and then there are advanced books. Once you know the basics its a bit difficult to advance on the path without proper guidance. So you turn to other places and that is where you see the crazy linux hacking and you think OMG! this is real programming.
You know what I love about PHP? My six-figure salary. If you're making more than $150 grand or doing Haskell, I'm willing to listen. Otherwise, I care less than a squat about anyone's opinion of PHP.
I'm not pretending to be Alan Turing or Bill Gates or whomever, but I make a very good living, provide a valuable service, and I'm grateful for it.
I find web developers in general more knowledgeable. Sure they are not working in low level programming, but those that are working in low level programming often don't know what DNS, FTP or SQL is.
Remember that those who work in low level programming had nothing to do with writing the language or building the compilers. They just got a degree and started working.
but those that are working in low level programming often don't know what DNS, FTP or SQL is
That's a very baffling statement that doesn't reflect any of my experiences (I don't think you realize just how big FTP is/was). How are you defining "low-level programmer" here?
Your definition is completely worthless, then. Someone writing Java EE apps is then a "low-level programmer", which is totally wrong.
In fact, ATMs these days more often than not have full operating systems like Windows CE with the software being a Java app that communicates over some standardized XML-based middleware to access ATM system and transaction mechanisms.
Kernel hacking, drivers, virtualization, FPGAs/ASICs, compilers/linkers/toolchains, bootloaders, firmware, debuggers, databases, shells, process managers, etc. etc.
There's plenty. Generally if you don't have to worry too intimately about VMM semantics, you probably aren't doing low-level.
I had to drop out at age 20 to financially provide for my mother (who was experiencing a major depressive episode and could not work)...
It's possible that you are experiencing the same thing. I have no qualifications to offer in this respect, but don't take this possibility lightly.
...and my two younger siblings (ages 2 and 6 at the time). ... There I was at age 20 providing for a sizable family... being a good son for my mother and being a good brother for my siblings. I was performing the role of the man my father and my siblings' fathers refused to be. I was entering the workforce as a real programmer. I was proud.
Oh, and rightly so! A real man is someone who steps up like this--someone like you--not someone who implements file systems in assembly.
So here is where I might have some qualifications to offer. I've been a pro developer since before you were born. I've done orbital calculations, nuclear weapons effect mitigation, realtime hardware, done standards committee work...in so many languages (Fortran, Lisp, C, C++,...up through Swift), but there have been times when the development platform I've chosen has been one that was held in low esteem by a lot of programmers (BASIC, Perl 4 CGI years after Perl 5 w/mod_perl was common), or not even considered programming at all (e.g., Excel, FileMaker).
I chose these as the best tools for the particular job under whatever normal or bizarre circumstances existed, and whatever tool, X, I was working with at the time, I was known as "the X guy" by my coworkers. And those coworkers have changed again, and again, and again, so remember me as an X guy, others a Y or Z guy.
I eventually learned to just focus on being as valuable as I could. Usually, what people need most from me is not arcane physics or CS knowledge (darn it! I worked hard on that) but just my ability to find them a solution that is most helpful to them. The most helpful solutions are usually not technologically impressive, as it turns out. I'd rather build them some microservices in Go but sign them up for SquareSpace instead and fill in a template.
Turn your attention, not to other programmers, but to the people you can help with your skills and to their problems. Try to get a lot more of your professional satisfaction from being useful to people who need you and less from how elite you think you are perceived to be by other programmers.
Web dev gives you all sorts of ways to be extremely useful to people. Do it. Feel good about solving their problems and let it motivate you to keep improving your ability to come up with valuable solutions. Yes, I understand that building yet another CRUD web app to sell dog food or whatever doesn't feel like curing cancer, but those people are trying to support their families, too, and it's not easy, and they need your help.
At the same time, yes, I can relate to a personal desire to do technically demanding work (but do it for the personal satisfaction of taking on the challenge, not to impress other programmers), but the way most people get into that is not usually to get an advanced degree. They prove themselves valuable at less technically demanding work, work on side projects in areas that interest them to develop new skills and, at some point, they spot an opening to utilize (make useful) those new skills for their employer. If it works out, their job responsibilities might change. Do it again and again, and eventually they will change.
I hope that turning your focus toward the people who need you and away from other programmers can help restore your self-respect and motivation. Good luck.
That was a great read and something I've experienced myself. It's nice to hear I'm not the only one with doubts about my abilities. Hopefully, it's these doubts that will empower us to become much better at our profession, so good luck to us all.
Good article. Web development is not the same as embedded development of course but it is also not just 'generating' CRUD applications with some js/css to make it nice.
Hope to see him succeed in his reinvention of his career :)
It's not about being able to do harder and harder things. It is about making hard things easy. When you help others like that, you will realize the value of your work.
I love that your response to someone saying they lost their confidence in the pursuit of new technology for its own sake is to recommend a new technology to learn.
Honestly I think the author wouldn't have such a crushing sense of inferiority if providing for his family wasn't an issue.
I'm very serious about this -- few people can handle the Sword of Damocles[1] hanging above their hands, those impossibly high stakes, that not only are they intimidated but they're paralyzed.
It's a deer in the headlights moment, except instead of being in an instant it's experienced over the course of days/months/years.
Morbid fear of failure can be crippling, even if you're more than capable of completing the task, and failing so consistently -- in the case of the author -- can actually have a damaging effect on your capacity to do such work. You regress.
There's proactive and reactive aggression. Proactive aggression is the typical bullying of others based on what programming they do. It's basically just another way to pat yourself on the back, and people eat that shit up.
Why? Your peer group literally gets arbitrary code execution on your brain. (It's a flaw in MonkeyBrainOS 1.01 which we haven't patched yet.) You'll tend to find yourself valuing what they value. You will tend to find yourself achieving outcomes strikingly similar to their outcomes.
Given this, picking a peer group whose values are not your values and whose outcomes are terrible is a poor choice.
There is some cognizable peer group of "the most misanthropic 10% of commenters on Internet threads about programming languages." The majority are not professional programmers. Most are not very happy people. You can generally tell a lot about what a person values by what they spend their time doing; someone who professes to value the great intellectual challenge that is Real Programming but actually ships comments which make other people feel bad probably, to a first approximation, values making other people feel bad.
If you do not also want to grow into a values system where making other people feel bad is the highlight of your day, consider choosing a better peer group, where e.g. feeding one's family through honest labor is valued and having very loud opinions about NodeJS not so much.