Hacker News new | past | comments | ask | show | jobs | submit login
Programming blogs (danluu.com)
286 points by jsnell on Apr 25, 2016 | hide | past | web | favorite | 60 comments

I love Gary Bernhardt's writings, screencasts and lightning talks and his sense of humor, especially this one[1]. But unfortunately, some JavaScript developers might feel it offensive.

[1] https://www.destroyallsoftware.com/talks/wat

I love that video.

There is nothing offensive in the video, I think he does a pretty good job explaining how bat shit ridiculous javascript is.

If you are writing js professionally and haven't already come to terms with that and the existential crisis it entails... you're gonna have a bad time.

"the existential crisis it entails"

The XML years were some pretty dark times. Pointing out the obvious wasn't appreciated. And so this too shall pass.

I'm super duper impressed by what people accomplish with HTML + CSS + JS. But, wow, the effort involved. Like pushing rope. Drinking the ocean. Juggling plates during a riot. Ironing a shirt while someone's hosing you down with a water cannon.

And the bit rot. Turn around twice and your crap has stopped working. It's worse than anything I experienced doing Windows development.

But maybe the constant renewal, the need for constant energy investment to counter entropy, maybe that's the virtue of "web development". It certainly prevents any status quo from forming.

Going forward I am now blaming entropy, and not crappy contractors, for destroying my work.

You have now allowed me to shift a huge burden of antagonistic feelings from human beings onto the fundamental nature of the universe.

I can now be no more upset about coming back to broken code than I would be at the shape of the milky way galaxy.

I know I shouldn't be turned off by this, but I so am. And I'm starting to dislike the dev-community more and more for each day I try to learn programming myself. Elitism at its worst.

I guess it started a few years back when I started an introductory programming-class at university where I was supposed to learn Java. I had already tried some light-weight languages like HTML and CSS and felt comfortable modding Wordpress-solutions. At the time, I studied a non-tech minor, and worked at an it-consultancy with a bunch of guys roughly my age. We were pretty good friends, but I strongly remember how they ridiculed Java as being old and outdated, and how I was wasting my time trying to learn more than the course expected of me. And it actually turned me off a lot, mainly because I thought these guys knew what they were talking about.

About a year ago, I tried my way with python for web-scraping and some light scripting, but ran into the same ridicule by a co-worker where I had my internship.

This february I finished my liberal arts'ish IT-master degree, and decided that I needed to learn how to do some code in order to get better at my job, and understanding it and tech in general.

This time, I'm focussing on FreeCodeCamp, and I'm dedicated to learn Javascript and front-end development. Because I've realized that there will always be people who trash-talk other languages, and I've learned that no languages are better or worse than others. I just think it's so frustrating asking for advice online when you run into people who fanatically defend one coding-language as "the only one" and trash talk everything else.

So fuck the haters - I'm learning Javascript, and it's gonna help me build some super cool apps that will help a lot of people!

You seem to be taking this personally, as if someone criticising a language you've chosen to learn is criticising you.

That seems like an odd reaction. It's perfectly possible to say "JavaScript is crap" without also implying "And everyone who learns it is an idiot. Including you."

It's actually useful - really, really useful - to understand where these strong opinions come from. As a beginner/outsider you may not understand a lot of the criticism, and when you do understand if you may not agree with it.

But the standard criticisms of all the popular languages are directly linked to how well programmers at all levels can work with them.

So if someone has an opinion about Java, they're really saying "I think Java is a bad language because..."

They may also be saying - and often are saying - "I know a lot about programming because I have a strong opinion about this."

What they're not saying is "You're an idiot" - because most often if you ask someone, they actually have no opinion about your competence, probably don't know enough about you to assess it (unless they've worked with you for a while) and realistically aren't all that interested in a random stranger anyway (unless they have a good professional reason to be.)

So the next time someone criticises a language, ask them why they don't like it, and ask them what they'd recommend instead and why they'd recommend it.

You don't have to agree with them or take their advice, but their reasons may help you understand why we have so many different languages, why no one is really happy with any of them, and why secretly pretty much everyone wishes the whole scene was simpler, better, and less frustrating and imperfect.

I don't make fun of JavaScript except in the company of fellow JS coders.

I think it has great aspects, and awful aspects, from a technological and just logical perspective, and I suspect even its creators would agree.

Still, I am too weary to see it as anything but a part of the reality of software in 2016. The language was designed in a hurry for commercial reasons, and subject to entirely different design constraints compared to, say, Haskell, which was designed by an academic committee over several years and with no demand for fast shipping, implementation, or familiarity for mainstream coders.

"Wat" to me is a satirical expression concerning the illogical and frustrating situations in which we nevertheless find ourselves needing to operate.

Despite my general appreciation of the language, it hurts me, and "Wat" is a warning that reminds me to be very careful with the treacherous semantics.

(But then, few languages get equality right.)

trash talk can be important(o)

the wat video in particular is more than an attempt at insulting javascript

it is an education, and an important one

one of undefined or odd behaviour

it strengthens anyone who watches it because you can move past the 'am i the only one who thinks this is odd' into the 'this is the spec, my work needs to be mindful of it, and now how do i use this knowledge to my advantage'

(o) edit: instead of 'can be' it used to say 'is', but i prefer specialists' quantification

Trash talk can be an antidote to groupthink, fanaticism, stampeding of the toads.

I write A LOT of javascript.

I would not discourage you from learning it at all, in fact I highly encourage it if you are starting out.


You really need to understand the limitations of the language.

It is poorly designed. It is infuriating to work with.

As far as the js ecosystem is concerned:

The community is fragmented and largely unreliable. The workplace is becoming increasingly saturated.

At the end of the day you should just learn what you want to learn, and like you said "fuck the haters". That's why I started learning Haskell a few months back and I'm really enjoying it.

The longer you blame ridicule and others opinions for your procrastination, the longer you will regret not learning to code.

The mockery/bullying that happens around technology decisions in the field is regrettable. It's really unfortunate that this kind of behavior turned you off of programming or any curious pursuit. That's not cool. Definitely do not let this attitude affect you at all.

But it's also not a behavior that is particularly uncommon outside of software. It's a kind of tribalism that you often see in communities everywhere. Sometimes people get picky and petty over their interests, careers, hobbies, etc. Game console choice, child-raising, criminal justice, fashion, anywhere the word "proper" is used. People are quick to get emotional about things they care about, and act out of emotion. I'm not excusing it, but it's pervasive. I know I'm guilty of it sometimes.

I hope I've never turned anybody off of learning with that kind of attitude.

I don't want anybody to get turned off from anything they want to do, but I think it's worth realizing that we used to see tribalism as a badge of honor. You don't feel like you belong when you're young or just starting out because you don't yet belong.

I remember reading programming blogs when I was starting to program and instead of feeling like those guys were elitist jerks who were excluding me, I thought, man, you know, I want to someday know as much as they do.

The ones you wanted to emulate were probably not the elitist jerks, at least, I hope so :-)

The really good ones will usually go out of their way to help neophytes.

Nobody hates what you can do with Javascript, they -- and I -- hate Javascript itself, a programming language that had to die the day it was born, but survived because it conquered the platform it was placed so spontaneously that nobody had the chance to replace it with something better, and then it became irremovible with a standard, which nowadays is as stable as a ball on a tilted surface. Still, if you manage to tame the beast to make something useful like say Gmail and Pocket, nobody will, well, most people won't nag you.

Like one other responder said: Please don't take it personally. I don't know anybody who says they hate JavaScript means that they hate JavaScript programmers or think less of them in any way.

> and I've learned that no languages are better or worse than others

This is decidedly untrue. Even if languages which are Turing Complete are strictly speaking equivalent, you should be easily disabused of this notion by simply trying to implement any algorithm of your choice in JavaScript and then trying the same in Brainfuck.

(Yes, Brainfuck is obfuscated on purpose, but I'm just trying to make the point crystal clear. The same thing applies to other comparisons, just to a lesser degree.)

Think of "Language X is better than Language Y" as a comparison operator for a partially ordered set.

So fuck the haters - I'm learning Javascript, and it's gonna help me build some super cool apps that will help a lot of people!

It sounds like the trash talk you encountered actually taught you a very important lesson, in the end.

Pick a language, any language, announce you are going to learn this language to accomplish X task. Guaranteed you will find a huge number of dissenting and confusing opinions as to why your language sucks for task X and you really should use language Y, where Y is a member of the set of every other language.

Stick with a language you find fun and useful. If that changes, well just pick up a new language, it is better to be doing and making mistakes and learning, rather than trying to find the perfect language for you - there is no such beast.

> and I've learned that no languages are better or worse than others

I don't think this is True though. Languages are different, and there is no 'best' if you stick to very broad standards of 'best'; But certain languages certainly have better net utility then others, relative to the market.

Since JavaScript is the only way to achieve a lot of things people want to do it is not going anywhere, even when the craze for server-side JS eventually dies.

my biggest interest in server side js is what i call offloading

i have server side code that can do a lot of heavy data calculations, and i client side code that can do a lot of heavy presentation calculations, and then i have the internet as a connection between them

since the presentation layer is burdened by needing to be sent to the client over the connection i have a constant optimisation interest in the size of the client code

if i am concerned about the time and data cost on the client, i can do a lot of presentation calculations on the server and send the results stead the source that found them

alternatively, if i am unconcerned with the time and data cost on the client, i can send more server code to the client to offload some of the work to relieve the server

because of this constant optimisation interest i always duplicate my server functions, whatever language they may be, in the presentation source.. currently javascript.. and vice versa

so i can decide on the fly where any function will run when situations define the optimal configuration

server side js would limit the extra work in some cases

but i doubt i'd utilise it because i find the transliterating step to be valuable in hardening the code and logic underlying

Well, you don't really need server-side JS to do that, but I can see how it would save some work.

I used to think that people who thought JS was ridiculous didn't understand JS.

I didn't understand JS.

Well, actually, I did understand JS. I understood it really well. You could show me any obscure piece of JS and I could tell you the semantics. Before I went all Web and JS and Hip New Tech, most of my work had been in Java, so understandably I thought JS was great. Then I started using other languages more seriously and now I am much happier and more productive.

Realistically, if you decide you are going to design a language where types are always coerced to perform operations instead of stopping execution when mismatched types are encountered, the choices JavaScript makes are pretty sensible.

Or you could do the much more sane Perl/Tcl thing and just have different pairs of operators for strings and numbers. Then the type of the variable is determined by what you're doing to it, not by what you last did to it somewhere else and god knows whether or not your == will be transitive this time around.

$str1 . $str2 will always be treated as strings, even if both are numbers (I'll get "53" not 8, if $str1 eq 5 and $str2 eq 3). $num1 + $num2 will either coerce them to numbers or fail, and I'll never end up with "5three".

Perl and Tcl might be debateably insane, but they make very sane choices when it comes to weak typing. Funny how a language where literally everything is a friggin' string has a more sane type system than JavaScript.

Except for + and == isn't that true of most operators in JS?

Yeah that's kind of the problem, those happen to be the two most commonly used operators.

All the other arithmetic operators try to convert too ('5' - 3 === 2), but at least produce NaN if the arguments can't coerce to numbers (an exception would be better IMO, but whatever). Bitwise operators consider non-numeric strings to be 0, not NaN, presumably because JavaScript bitwise operands are always considered to be signed 32-bit ints. Apparently ~'js' isn't a TypeError. ¯\_(·ω·)_/¯

> if you decide you are going to design a language where types are always coerced to perform operations instead of stopping execution when mismatched types are encountered

Realistically, you've stop being sensible at this point.

If you insist on going that route, you'll need to define stuff like addition between an object and an array, and there is just no good way to do that.

Making your failure modes safe is a sensible choice. Attributing semantics to any character permutation a developer may throw at your compiler is not.

There are real advantages to doing this, especially when you consider the kind of stuff JS was originally intended for (for instance, non-programmers can write very simple JS that handles input text without having to understand a type system and parse strings as numbers).

This is more in-depth and less for the lulz:


Thank you! For 30+ minutes, Kyle Simpsons definitely covers a lot of more JavaScript gotchas, which again reminds me of this picture: https://pbs.twimg.com/media/CdtFF5VWoAEmbL4.jpg

From the same person:

- The unix chainsaw, how to use tiny tools[1] as lever upon themselves. No absurd wit as in wat. Simply brilliant. https://youtu.be/sCZJblyT_XM

- Also listed above the wat page, https://www.destroyallsoftware.com/talks: boundaries, a whole new world. More abstract wishful thinking. Still brilliant.

The one you linked is a must-watch!

Some extra suggestions:

- Null Program: http://nullprogram.com/index/

- Insane Coding: http://insanecoding.blogspot.com

- Agner Fog's Blog: http://www.agner.org/optimize/blog

I love Scott Hanselman's blog. It's one of those blogs I check in with every so often. http://www.hanselman.com/blog/

Are we allowed to mention our own blogs? :) http://datagenetics.com/blog.html

Glad you did. Had a quick look. Found this post quite interesting http://datagenetics.com/blog/march12016/index.html

Since you did I might as well. Me and my brother are starting out on our blogging "careers" so I would love to hear your opinions http://codecleane.rs

It's about software craftmanship in an enterprise environment

Looks great. Here is a quick tip that I think could really help first-time visitors and of course your own blog. I think you could add an "about" page just to let people know what your site is about. I hope this feedback is useful as is my intention.

Since we are on the subject of personal blogs is http://www.new2code.com which aims to help people get their first job in tech. I expand on other themes in the future but right now I want to learn and share as much as I can about getting that first software development job.

If you're listing V8, might as well add Andy Wingo: wingolog.org

I only recently found Dan Luu's blog (from the excellent Google SRE book review and the "We only hire the trendiest" posts), and really like it.

Of the listed blogs, I have previously read Steve Yegge, Eli Bendersky and Yossi Kreinin - all three fantastic. I'll have fun going through the rest in the list.

This post inspired me to give my feeds a public home: http://akkartik.name/feeds.xml. You can see all the ones I stole from OP at the top of the list.

Compared to OP's more curated list, many of my subscriptions post only intermittently, but that doesn't bother me. Instead, if a site posts too frequently I might boot it from my subscriptions. RSS is only for sites that I never want to miss a single story from.

Cool. I just checked if there might be an awesome list[1] on Github for this sort of thing. Unfortunately, they only have one that lists tech companies' engineering blogs: https://github.com/kilimchoi/engineering-blogs

[1] https://github.com/sindresorhus/awesome

obligatory http://blog.codinghorror.com/ mention

Uncle Bob anyone?


Nope, Uncle Bob is a know-nothing blowhard with a grossly inflated opinion of his own competence and an attitude problem to match. Sometimes he says things that are true, and sometimes he says things that are just false enough to be badly misleading, and you can't tell the difference unless you already know it.

He consistently substitutes dogma for evidence and insight.

Not recommended.

Interesting. Could you please give an example of one thing he said that was "just false enough to be badly misleading" ? (Not trying to prove you wrong here, just being curious)

Here's a list of errors I found in an article of his about a year ago: https://lobste.rs/c/grmdxi

Thanks, but the comment you linked to is just a list of disagreements without explanations (whose author even admits it later by stating that "simple ridicule is both easier to write and more entertaining to read" (!)).

I was hoping for something more tangible. Searching wikipedia doesn't support the author's claims about FP ( things like "FP is about higher-order abstraction facilities, not immutability").

Yeah, I didn't bother to explain in depth how things really are, because that would have required an order of magnitude more effort than just listing Bob's absurd nonsense claims, which is adequate for my audience. I'm sorry that Wikipedia isn't sufficiently clear and correct to replace knowing what you're talking about, and I'd fix that if I knew how, but I don't.

Teaching difficult ways of thinking, in person, to people who trust and respect you, is already hard enough. Trying to teach them to random people on the internet who think you're quite possibly full of shit and may not even bother reading to the end of what you write, that's an exercise in futility.

Forgive me if I don't accept the implied invitation.

Some suggestions are here [1]. This is a curated list of engineering blogs from both individual and company contributors.

[1]: https://github.com/kilimchoi/engineering-blogs

Here are some software engineering blogs from my RSS reader in addition to the ones listed in TFA. I honestly don't know how over or underrated they are, but I guess that varies depending on which communities you're closer to.

Mikola Lysenko https://0fps.net

Graphics programming, geometry and algorithms.


Steven Wittens http://acko.net

Not underrated in any sense of the word, but I have to include it in case there are people who haven't seen it yet. It's about math and graphics, but also about art and design. Amazingly educational. http://acko.net/blog/how-to-fold-a-julia-fractal/ is a good starting point for new readers.


Mark Nottingham https://www.mnot.net/blog/

Networking and HTTP.


Jeff Preshing http://preshing.com

Efficient concurrent data structures.


Bruce Dawson https://randomascii.wordpress.com

Software efficiency, performance optimization, fractals and more.


Yann Collet http://fastcompression.blogspot.com

Modern compression algorithms.


Gil Tene http://stuff-gil-says.blogspot.com

Also definitely not underrated, at least not in the Java world. But any engineer who cares about latency and honest benchmarks will benefit. Low latency techniques, GC performance, lock-free programming.


Tony Finch http://fanf.livejournal.com

C and UNIX programming, and more.


Andy Wingo https://wingolog.org

Scheme, Compilers, JavaScript, and much more.


Aleksey Shipilёv http://shipilev.net

JDK internals, low-level optimization.

Might I suggest Mr. Blake Ross' blogs? His post "Mr. Fart's Favorite Colors" is among my favorite blog reads of all time.


> a hacker who will stay up till 4:00 AM rather than go to bed leaving code with a bug in it.

Question for other folks here: In your experience, does staying up until 4:00AM tend to lead to you being more or less productive in the long term?

If you've been working on a bug for an hour+ and it's 2AM it usually means it's time to put the keyboard down.

For me, what usually happens is I go to sleep, wake up, and have it fixed in 5 minutes.

That was the only thing cigarettes were ever good for! Back when I smoked, if I was stuck on something, I would go have a cigarette. Most of the time I would have the answer (or at least a hint) when I came back in. Some say that nicotine temporarily increases brain function, so I just chalked it up to that.

Many of the advantages of smoking can be chalked up to breath control. Sometime, try standing up, walking around your desk, and pretending like you're smoking. Inhale just as you would a cigarette, but just plain air. It works remarkably well (for me anyway).

Both. There are two scenarios where I'm staying up until 4am.

1. My three bosses were harassing me all day about deadlines. At home I can't sleep because of the stress: "I'm not going to sleep until I fix this bug because we have a deadline." => useless and unproductive. Net negative productivity.

2. Quiet day at the office. Just had a decent meal with friends. Get home to a quiet house at 9pm. Flip the computer on not even planning to work. "Hmmm... wait a sec this is interesting. I wonder if I could... What time is it? Is that the sunrise?" => likely did something in one night that would take weeks/months in an office setting.

Less, for a few days, if you do it once. Doing it regularly leads to lower productivity until you quit doing it.

I've had it go both ways before, but I noticed during university when I was forced to do such things that after you've had a couple weeks to rest, whatever you were working on before becomes crystal clear in a way that it wouldn't have been if you just relaxed and made steady progress. Probably something to do with the stress burns it into your brain.

More, because I can get 4 more hours done than if I go to bed at midnight and I am more motivated later and far less likely to be disturbed. I can't do it as much these days because I have a day job which gets in the way.

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