How Religion Destroys Programmers
simpleprogrammer.com
simpleprogrammer.com
In fact my religious approach has been to avoid trends.
This being said, within any framework, there are right ways to do things and wrong ways to do things, and a good, solid programmer in the worst framework in the world (ok, maybe not the worst but close) will beat a shakey programmer in the best.
To me, I think that low-level and high-level computing are fundamentally different in terms of their concerns. You can get multiplier-type effects with successes at the low level (if you're really expert) and that's what pushes Moore's Law, innovations in GPU technology, etc. However, making computers useful to other people (including programmers who, working day-to-day, can't possibly understand all the moving parts) involves an entirely separate set of concerns.
What I think is "just window dressing" is a lot of the business mediocrity that gets dressed up as "scaling" or actual computer science (to the ignorant). The Business tends to overvalue parochial, shallow, and not very transferrable knowledge while undervaluing genuine computer science (much less mathematics). But there is junk at the low (make some mediocre product built with shitty technology 10% faster) and high (business bikeshedding) levels of abstraction.
What alternatives to the Von Neumann architecture would you want to see, and what are the major differences?
Why do you think VN machines "won", given their deficiencies?
The other one is dataflow architecture, which involves representing programs as a digraph where nodes represent instructions. Data flows through edges from one instruction to the next non-deterministically. This was popular research material in the late 70s and early 80s, but there were efficiency concerns.
IBM (and Von Neumann) also dabbled with making computers that resembled neural networks, but VN passed away before he could dedicate a lot of time to it. AFAIK IBM's neural computer is still in research phase.
I'd say Von Neumann machines "won" for a few reasons. First, Von Neumann consulted for IBM in the department that developed their first commercially-sold computers, so he got a lot of creative control. Second, as Hennessey and Patterson wrote in Computer Architecture: A Quantitative Approach, advocates of Von Neumann computers regarded HA machines as reactionary, implying there was even some religion back then. Third, Von Neumann architecture machines are significantly easier to load programs into. My guess is that a combination of business/political concerns on IBM's part in the 50s and 60s combined with momentum and switching costs is the main reason VN machines continue to win.
[1] P. W. Anderson, https://www.sciencemag.org/content/177/4047/393.extract
If anything it should make you realize that tooling is very important, as you get to experience first hand the enormous increases of potency each abstraction level gives you, from electronic gates to bit codes to asm to C to Smalltalk or Lisp.
If any of those levels opened up your eyes to the power of tools, why wouldn't it open your eyes to many other technologies?
Some good fundaments for your arguments make sure you can build a good opinion. I like Ruby because its object model is near perfect, I like C# because it's got one of the most powerful syntaxes out there, I like Haskell because of the incredibly pure functional style and I like Javascript because it runs in the browser (of course I write CoffeeScript so I don't have to deal with some of its failures).
Do I think these technologies could be better? Yes, but that doesn't mean they're window dressing, and it doesn't mean I'm not optimistic about them.
Also, I'd definitely argue the crap out of anyone who dares to disagree ;)
Sometimes the only way to beat analysis paralysis is to pick something, anything, and then pursue it with religious zeal. (Sometimes even to the point of excluding something you find out later would have been a much better choice)
I can definitely get behind the idea that you shouldn't be an unpleasant bigot about it, but a little dedication doesn't hurt. Its better than "Gandalfing" the merits of this or that technology for longer than it takes to just pick something and get it done.
Sure.
> and then pursue it with religious zeal.
This does not follow. You can pick something while still being fully aware that you just picked it "because you had to", rather than delude yourself into thinking you picked it because it was the absolute best.
It doesn't seem like these two are very similar.
Important question is whether he is able to produce functional, readable, well-designed code in acceptable speed. In case of projects under time pressure, the important question is whether the developer can do reasonable trade-offs between those expectations (eg. sacrifice the right one).
I read @noonespecial's comment as saying that once you pick something, sometimes you should stick with it "even to the point of excluding something you find out later would have been a much better choice".
I think the "with religious zeal" bit was either a mistake or was intended to mean something different.
Rather, I interpret it as recognizing both the costs and benefits of switching, as well as the costs and benefits of evaluating costs and benefits.
Let me take the example PHP, since you mentioned it and I don't know enough to have an opinion.
PHP is generally claimed to suck badly. But even I can see that the "haters" on HN generally don't know/discuss the existing PHP frameworks and methods.
If I would look at PHP to evaluate it for a project, I'd look at if it seems fun to use (really important!) -- and if it would be usable with good coding standards and modern frameworks.
The bad things people talk about PHP (bad cruft in naming of methods, kludgy parts) are not relevant if it takes a few hours/days to learn that -- and if a good coding standard can limit yourself to a subset of the language. You need to do that for all languages anyway. (See JavaScript.)
But: One big red flag would be if the language proponents are language war fanatics that vote down criticism of their language/framework while attacking all competition. You probably know which ones I talk about.
Javascript is by no means a good language. I think "needs a coding standard and a few hours/days to learn which parts to avoid" is a point against a language - not necessarily reason to rule it out entirely, but a mark in the negative column. There are plenty of languages where this need for a standard doesn't seem to arise, because the obvious way to do things is good enough (e.g. Python).
> But: One big red flag would be if the language proponents are language war fanatics that vote down criticism of their language/framework while attacking all competition. You probably know which ones I talk about.
That's a terrible reason to make any decision. It reminds me of the guy who wouldn't listen to U2 because he didn't like their fans. If you avoid languages that're used by idiots you'll find yourself on a treadmill where you're constantly moving from incomplete language to incomplete language, because as soon as a language gets good enough, idiots will find it and use it.
My point was that you have to compare the practical use cases, that is "the good parts" of a language/framework -- not the bad cruft you can avoid. A few hours investment is nothing. (JS still has problems, many are being solved.)
This is trivial of course, but strangely ignored by many on HN with an IQ that probably is the sum of our two's...
>>If you avoid languages that're used by idiots
I wrote that I am suspicious of environments used by language war cultists, intelligence is orthogonal.
(A typical example is someone that starts recommending his favorite environment even when it isn't discussed, as suitable for everything just by its std use cases... Like you :-) )
Edit: Absolutely agree, mercurial.
On the other hand, some stacks, I feel, do help with writing better code. But don't fool yourself that there is a silver bullet.
I've been doing IT professionally for 15 years now (how did that happen, I'm old!), and I've been an computer nut for about 25. I think as you grow professionally, you start to recognize that tools are tools, and the best tools depend on the environment, team and task at hand.
I used a handsaw and miter box to cut some moulding this weekend to finish up a home project. I like using hand tools for small projects, but that doesn't mean that my brother-in-law's professional power miter saw is "bad', or that using a hand-saw at a construction site where time=money to "good".
What I try and be is acutely aware of trends and then try and use them in my spare time or introduce them into my day to day development. So at the moment there is a lot of love out there for Javascript frameworks (AngularJS in particular). I like how it allows your front end to become middleware agnostic.
It's one sexy trend I think is also a lot of fun and gives great results and I'm jumping on board for the next couple of years.
Just remember to try and learn something new everyday :)
I ask because I actually learned ColdFusion back in the mid to late 90s, but never really did much with it; Perl largely supplanted it in the stuff I was doing, and by the time I entered college, Java supplanted that for web (and actually in industry I'm using a lot of others).
(Not that I want to do that, by any means; I don't have the experience or desire. But curious)
There's nothing wrong with it (although a lot of the time I end up writing Java as CF now compiles to it).
It just doesn't have the user base out there and most companies did the right thing and bit the bullet and migrated to "a nother" technology. In the UK this usually meant .Net
Currently I'm of the impression that we'll end shifting to Python or Java however there is a huge legacy set of code to overcome first.
My initial programming training was FORTRAN (in 2006!) and I then "taught myself" C++ (I didn't know anything about C++ by the end of it), wrote a ruby-on-rails "site" for a friend, and then got a job writing C# and MS SQL, where I wound up actually writing a lot of Actionscript 2.
This was all while I was still learning about new programming concepts, e.g. I was using lambdas/anonymous functions in Actionscript before I knew that there was anything special or difficult about having inline functions as objects. When I finally tried to write a non-trivial program in C, I started to understand the difficulties and trade offs of all the complex, mutable collection types I had been using in higher level languages. and so on.
I say all this, because when you come into programming on that journey (now rounded off with 3 years of Python-and-C/C++-extensions) you don't have time to develop a religion (that lasts any length of time). It becomes apparent that lots of different technologies work in different circumstances, and that each of them shares a lot of ideas, and have some unique features (good or bad).
That said I do have a preference, indeed I posted a language rant last year[1]. I still think homoiconicity is wicked, even if not always useful - and I've not yet ever written something that anyone uses in lisp.
[1] http://joe-jordan.co.uk/blog/2012/10/one-syntax-to-rule-them...
there used to be a time where all our scientists used to be philosophs with a lot of proficiency in a lot of different domains. that's not even too far back.
http://journal.dedasys.com/2006/02/18/maximizers-satisficers...
The customer couldn't care less what gets used to develop the product.
Technology religion only serves to sell training stuff, fill conferences and entertain ourselves in flame wars.
No. The problem is that this self-imposed religion blinds us from the fact that there is no "truth".
When we have the Scala and Python and Lisp crowds all slugging each other over minor differences in the languages, it generates background FUD in the same way that mechanical collisions create waste heat. Then the MBA-culture colonizers get overloaded thanks to all these disparate overblown accounts of each language's deficiencies, but since they construe their job as Making Decisions, they feel a need to Say Something and make everyone use Java, because it's "the standard". Now there's no Scala and no Python and no Lisp for anyone (at least, at that company).
Religious wars actually lead us to mediocrity, because business people get to make the decisions when we become so fractious.
For example I am Java guy (or more precisely JVM guy), it satisfy all my needs. There are new innovative languages, IDEs, databases, concurrency libraries here... It would take multiple lifetimes just to explore small fractions of that.
It takes years to get efficient at some platform. Other technology also means changing working habits, libraries, IDE, debugging style...
I know C++, PHP, Ruby, JavaScript, Erlang etc are not for me. Not based on some 'religious' arguments, but because I actually investigated it or worked with it at some point.
- C++ language is horrible, there is small island around QT, but most code out there is mess. Not much has changed since my school
- PHP has reasonable runtime, but code culture is atrocious.
- Ruby has horrible runtime, horrible community and code culture even worse than PHP
- JavaScript has not changed much since 1999. Sure there is JQuery and HTML5, but it still sucks.
- Erlang is interesting, but too alien. Plus it is not usable outside of very narrow specialization.
C++...most code in any language is a mess. The language being horrible is an opinion.
PHP can't comment.
Ruby...the community always struck me as a strength for it, honestly. As there are multiple implementations, which are you referring to, exactly?
Javascript hasn't changed since 1999 except for jQuery and HTML5? -Really-? Ecmascript 3 (actually, 2; 3 was standardized in December 1999) is the same as 5, and all the libraries and functionality and approaches and ideas are no different than a time when Geocities was a big thing?
Erlang is alien (fair, but...that's a reason to be dismissive?) and -not usable outside of (a) very narrow specialization-?! It's extremely usable -except- in a few specializations, which the language site even lists for you.
Most people think that learning new languages gives some sort of spiritual enlightenment. But in reality most languages are minefield of legacy problems and hidden traps. The 'boost' or enlightenment usually comes from learning new stuff, not just programming language.
Sure if you like some new clearly designed language (Clojure comes to mind) give it try. But do not expect miracles from 20 years old platform.
I dont want to argue about languages. All languages have to keep backward compatibility and for outsider Java is strange as well. Lets just say that all of those points are my opinion.
Now I can not tell if you are serious. There is pretty bad history with forced conversions. Also in most monotheistic religions it is the worse possible offense to worship other gods.
However, just to avoid any ambiguity, I've edited to try and clarify what I meant.
In terms of try, as in, convert, no, for obvious reasons.
If you mean observe, learn from, and attempt to find common ground, obviously. Attend services of religions you don't agree with, in a spirit of curiosity, see what practices you can borrow. I mean, the Catholic Thomas Merton found inspiration in Zen Buddhism, and he found the Zen practices, detached from the Buddhist beliefs, worthwhile.
However, just to avoid any ambiguity, I've edited to try and clarify what I meant.
> [rest of message filled with religious arguments]