'Pragmatic Programmer' Author Andy Hunt Loves Arduino, Hates JavaScript (bestprogrammingbooks.com)
Andy Hunt is one of the 17 software developers who wrote the Agile Manifesto, and he co-authored The Pragmatic Programmer. Now Slashdot reader cerberusss writes:
In an interview with Best Programming Books, Andy Hunt mentions he "hates languages that introduce accidental complexity, such as JavaScript -- what a nightmare of pitfalls for newbies and even seasoned developers... My go-to languages are still Ruby for most things, or straight C for systems programming, Pi or Arduino projects." Furthermore, he mentions that "I tend to do more experimenting and engineering than pure code writing, so there's occasionally some soldering involved ;). Code is just one tool of many."
Andy writes that he also likes Elixir, talks about Agile, reveals how he survived his most challenging project, and says the biggest advancement in programming has been the open source movement. ("Imagine trying to study chemistry, but the first half of the elements were patent-protected by a major pharma company and you couldn't use them...") And he also answered an interesting follow-up question on Twitter: "Do you feel validated in an age of Node and GitHub? Some of your best chapters (scripting and source control) are SOP now!"
Andy's reply? "We've made some great progress, for sure. But there's much to be done still. E.g., You can't ship process."
Andy writes that he also likes Elixir, talks about Agile, reveals how he survived his most challenging project, and says the biggest advancement in programming has been the open source movement. ("Imagine trying to study chemistry, but the first half of the elements were patent-protected by a major pharma company and you couldn't use them...") And he also answered an interesting follow-up question on Twitter: "Do you feel validated in an age of Node and GitHub? Some of your best chapters (scripting and source control) are SOP now!"
Andy's reply? "We've made some great progress, for sure. But there's much to be done still. E.g., You can't ship process."
..programmers with screwdrivers" a mentor of mine in SW engineering once said. I've largely ignored that dictum, as a more problematic group is programmers who have no idea what a screwdriver (or soldering iron) is for. Programs exist to interface with the real world in some way, and understanding the larger (sometimes analog or wetware) view can make the difference between an elegant, but useless, piece of code and something that changes the world.
Ooooh going for some controversial choices there. Can't be many people who don't love Javascript but I guess that's just the sort of radical free thinker he is.
Because of course one of the people involved in creating one of the worst management fads ever would also join the JavaScript hate train.
"The Pragmatic Programmer." Hardly. Real pragmatism is recognizing that popular languages are often the best tool for the job, no mater how aesthetically distasteful they are.
Ever notice how prolific JS users rarely defend the language? Of course it's badly designed. We use it because it's pragmatic to use the lingua franca of programming.
What isn't pragmatic is using languages with declining market share because they feel aesthetically "better," or imposing horrible management fads like Agile/Scrum on your team against their will.
So I'll pass on joining this guy's fan club.
You're right, I wouldn't steal a car. But if it were possible, I sure as hell would download one!
Over the years I've come to realize that programming languages aren't standalone beasts. When you pick one, you get a lot of other stuff along with it: common libraries and frameworks, runtime systems, problem domains, communities of programmers who do things a certain way, and the sources where most people learn them. That last bit is not to be overlooked, one of the best features of C is The C Programming Language.
As for pitfalls for newbies -- I think that's the browser, not Javascript. Javascript seems pretty straightforward in Node.
Post may contain irony: discontinue use if experiencing mood swings, nausea or elevated blood pressure.
I like what I can do with JavaScript in the browser, but I don't like the language.
A number of newer languages are embracing the idea of protecting the programmer from doing the wrong thing by accident, and I welcome this trend.
Even though I enjoy my occasional work with Python, the other day I accidentally forgot to explicitly reference a specific variable from a returned tuple, the error code I wanted to check against. Python happily let me compare tuple_value != 0 without complaint. While it may be possible to conceive of a situation in which a programmer MIGHT want to compare a tuple against an integer, it seems like 99% of the time, it would be best to throw an error, and force the programmer to do such an operation explicitly, rather than assuming it was intentional. It would have saved me a lot of hassle had this operation not been permitted. So, just one example there.
JavaScript has a lot of similar issues, from what I understand, such as weak scoping rules, global by default, no namespaces, and overly-generous implicit type coersion. All these things seem to work against the programmer, even if they were originally designed as conveniences.
It's really a shame that "what we have" for the web is JavaScript, so it's sort of impossible to work in web and ignore it. In my particular industry, "what we have" is C++. I'm not sure whether I should feel fortunate or not compared to web programmers. C++ has it's own particular nightmare of complexity, but the good news is that with C++, you can protect yourself from stupid mistakes with enough self-discipline, and the language has improved remarkably in the last 6 years.
Irony: Agile development has too much intertia to be abandoned now.
Original submitter here... I just came here to compliment the editor (EditorDavid). This is my first time submitting and thought my summary was pretty good. But EditorDavid just went above and beyond, extending it with stuff from Twitter, couple of sentences on Andy Hunt's work ethic cetera.
It's been tradition to hate at the editors here, but this time I have to hand it to them, compliments are in order.
8 of 13 people found this answer helpful. Did you?
As someone else said, often Javascript is the right tool for the job, because the job is manipulating DOM elements in a web browser.
A major new future in Netscape 2.0 was that it had Scheme embedded, for scripting. Ten days before the public beta, it was decided that the Scheme effort couldn't be salvaged - it just wouldn't work. But Netscape's hype had promised embedded scripting. So in ten days Brendan Eich designed, coded, tested, and integrated Javascript. 10 days for all of that means he had about two days to design the language. It shows. Other languages have had years, or at least months, of design. Javascript had about two days. Eich did an amazingly good job, for weekend design project.
Obviously Javascript has matured a bit since then, but its origin as the mother of all all-nighters, the crashiest of all crash projects, still shows in its design, its inconsistent naming of functions, etc.
Reading this, I'm thinking back to the early '80s when COBOL could be described exactly the way you are talking about Javascript.
Now, we're 30+ years later and people who have experience with COBOL (and the systems/tools that work with it) are in hot demand because of applications that won't die.
In 30 years, will we see the same need for programmers that understand how Javascript is programmed and can support the applications that were written in it?
Mimetics Inc. Twitter
What I find interesting is that all of you went right for client side horribleness. What about node.js people? They think it's the end all language. Those people are the worst.
Node does not scale. How can it? No threads!
My go-to languages are still Ruby for most things
I guess "The Pragmatic Programmer" is one book I'll never buy.
Ruby is the Toyota Corolla of programming languages. It isn't especially well-suited for any specific task; it doesn't scale well, it doesn't optimize well, it has none of the advantages of similar languages like Python or Groovy. I see no reason why someone who doesn't already know ruby would find it useful to learn it. It's as pointless as Pascal.
lucm, indeed.
often Javascript is the right tool for the job
Eh... right tool, or only tool?
systemd is Roko's Basilisk.
I wrote more than 2,000 lines, plenty of global variables--and no pointers. It's a serial port controlled command-line stepper motor control program with 40 commands that fits in 24k.
Video of what it does:
https://www.youtube.com/watch?v=Lm8oprDhAnQ
http://forum.arduino.cc/index.php?topic=469343.msg3213804
Having worked with Arduino's for years, I question pointer use for all but operating system and hardware level programs.
https://www.youtube.com/c/BrendaEM
I have stayed away for web programming because I hate javascript so much. I am not a slave. I choose not to spend part of my life dealing with that horrible abomination of a programming language.
yawn. :(
It's funny that you mention that, because I was going to say that Javascript is a lot better if you program in it as if it were Scheme than if you try to program in it as if it were Java.
The inconsistent naming of functions makes the same point I was making: that's not a language problem, it's an API problem. If you take Javascript out of the browser and put it into a freshly designed runtime environment (e.g., Node) that aspect of the language experience goes away.
Another language that "has" this problem is R. R is peculiar enough anyway -- it doesn't seem to have any scalar types. If you assign 3 to X ("X <- 3"), it creates X as a vector of length 1 and puts 3 in X[1]. If you say "X + 1", it's the equivalent to the Python "map(lambda n: N+1,X)". That's surprisingly easy to get used to, because it works in the problem domain the language targets (statistics). What's harder to get used to are the libraries, which are magnificent in their comprehensiveness but are obscure, inconsistent, and poorly documented.
Those libraries are a major reason to use R -- much like CPAN is a major reason to use PERL. This makes those libraries' irregular design and stunningly half-assed documentation an inextricable part of the experience of being an R user. The closest thing I can compare it to is learning a natural language like French. You need books with titles "100 Irregular French Verbs Conjugated" because when the conventions aren't uniformly applied you have no choice but to drill until you have the specifics memorized.
Post may contain irony: discontinue use if experiencing mood swings, nausea or elevated blood pressure.
You can do OO in JS, but it is not well supported. In other words, you can HACK OO programming into the language in a kinda sorta way.
JS is a lingua franca but its a very bad one. It wouldn't be so bad if the language had actually been designed and was consistently implemented.
That being said our industry never learns. We dealt with termcaps and incompatible ChUI terminals in the 80's, odd and/or incompatible desktop graphics capabilities thru the 90's followed by browser incompatibilities and now vastly different JS engines. You would think the industry would eventually figure out that taking decades to establish baseline standards for software means that the horse is out of the barn (and it burned down and they put up a shopping mall in its place) because the standards come too late.
Each company views the giant gap between rising popularity of something and the actual establishment of a standard as a place to drive a wedge and establish a competitive advantage. In the meantime developers and users suffer and projects come in even later; even more over budget and still not fully functional.
Suppose you were an idiot. And suppose you were a member of congress. But then I repeat myself. -- Mark Twain
One thing I've really screw over "agile" projects is a concept I call the agile lawyer. In theory law is supposed to make society fair. However we have people called lawyers that while they can help you they can also use their expertise to completely pervert the idea of fairness. Similarly I've seen the same idea crop up in agile. You'll have a guy, usually a scrum master, can totally quote any particular part of agile you could mention. However when it comes time to actually do agile they just end up using agile doctrine to fuck over the development team. Shit like oh you're self managing but you can only grab from the top of the backlog. Oh, another one is keeping interesting projects out of the sprint process so, surprise surprise, they can work on it themselves. Of course the classic, everybody is equal on the team, except most of the planning of projects that's special and only the leads get to put their 2 cents in on that.
Did you know 80 to 90% of the moderators on slashdot wouldn't recognize a troll even if one dragged them under a bridge.
One can hate javascript because it's badly designed and still use it because it's the best tool for the job.
And using a language with declining market share can also be very pragmatic, for example when it's the best tool for the job.
Railing against Javascript is like refusing to speak english because it's a convoluted language filled with inane rules, exceptions and colloquialisms.
nt
You either work with the language, or you work against the language.
Honestly if you aren't going to take the time to learn the subtleties of a language, you just shouldn't be using it. Expecting a tool to work just like every other tool you've used in the past is going to lead to problems.
It's great that Andy is wealthy enough to pick and choose which languages and projects he's going to use. The rest of us are stuck writing code that our employers will pay us to write which generally means using a language like JavaScript.
In the case of R, there's a sub-universe of it's own using the Hadley Wickham (and his cohorts) packages tidyr and so on. If you buy into the hadleyverse (he prefers the name tidyverse).
I'm particularly interested in the new packages for reading data readr and readxl, which are supposed to be much faster with saner defaults. The old read packages had a habit of treating all strings as though they're a database enumerated type, it would try to "tokenize" everything on the fly...
I think what you're talking about with R is a symptom of any long established language-- there's bound to be lots of oddities, cruft, workaround for misfeatures, and a bewildering array of competing libraries to do things in slightly different ways.
Personally, I wouldn't complain about R favoring vectors ops (it's better then struggling along implementing your own the way you need to in most languages). There's plenty of oddities: first of all, the "." is not a method call, though it's used everywhere in names (just like "_"): R does however *have* method calls, they're implemented with an arrow, just like perl5 ("->"). The type system is a little strange, where if you've got an aggregate of items all of the same type, the aggregate is regarded as being of the same type...
Anyway there's a new Wickham book "R for Data Science" that's supposed to be pretty good. Let me give you a link to it, O'Reilly has broken their website (e.g. they no longer have the word "book" visible on it's front page): http://shop.oreilly.com/produc...
Agen Obat Pembesar Penis KLG
Agen Obat Klg Asli Pembesar Penis Herbal JUAL OBAT KLG PILLS Asli USA Harga Obat Klg Murah Obat Pembesar Alat Vital Pria Tradisional Secara Permanen Aman Tanpa Efek Samping Cepat Akurat Alami Obat KLg Lebih Bagus Dari Pada Obat VIMAX ATAU Obat Lain Nya Sudah Teruji Secara Klinis Tidak Berhasil UANG KEMBALI 100%
Am I the only one that realizes that Arduino is just some overpriced circuit board with an ATMEL MCU on it? You're not coding in "arduino" it's C. I built these boards manually years before the Arduino came out, it's not hard, and it's $3 versus what, like $30? I really wish people would get off this Arduino train like it's something to be proud of. Or maybe I'm just bitter I didn't come up with the idea of selling an overpriced board with an ATMEGA microcontroller presoldered for you. It's seriously a joke. Oh and the writer is such a badass for using a soldering iron... right... you code in Ruby. Give me a break. Write something for an MCU that's requires raw ASM and then you get to "wink". Or maybe build a circuit from straight SOICs that can do the same thing as a prebaked ATMEGA and then you get to brag.
Sorry, I'm sick of the Arduino pumping/stroking like it's something to be proud of. It's kind of pathetic that you need a company to build the boards for you since you're so well adept with a soldering iron. You know you can hire a company to prefab boards for you for cheaper right?
That is scrums only purpose.
A noisy workspace is counterproductive.
By forcing everyone to come in at set hours and enforcing noise, you are simply enforcing inefficiencies and pissing people off for no good reason.
"buzz of collaboration and innovation"
WTF is that? Meaningless word salad. If I heard that I would quit on the spot. Of course I would be gone the second they wanted a noisy workspace. I don't work anywhere where I don't get a private office and very limited meetings, no more than 1 hour a week except during planning stages.
Agile is shit that promotes bad work environments.
And French was the Lingua Franca for awhile because Francs was a dominant country, and English has been Lingua Franca for awhile because Great Britain and then the US became dominant counties...
The phrase "lingua franca" means it's in common, widespread use and it's easy to find someone who speaks it. It does not imply excellence of any sort. If you guys want to fight about something, maybe you could think a little harder about what you're fighting about.
Your ignorance is astounding and frightening.
Amusing, coming from someone who claims to know "the most widely deployed OS in the universe".
Prove it. (And then make sure to share your data with NASA).
lucm, indeed.
Haters gonna hate.