It seems like people dislike Objective C for the same reason people dislike JavaScript - it’s(was) the “only” option you can use for the specific platform and when you’re forced to use quirky language as the only option the frustration grow faster
Things like this are why I don’t trust Martin’s opinions. He didn’t say a single bad thing about Clojure, he didn’t have any nuance, he doesn’t respect the other viewpoints. He does the same thing with TDD and clean code, where it’s impossible for them to be the wrong tool. He’s been programming for five decades and still thinks in silver bullets.
For the record, his Clojure example is even shorter in J. It’s just *: i. 25.
but that misses the point. Both Clojure examples are easy to explain and understand, where in J it is not obvious what *: and . stand for, and how these should be changed should we wanted to compute something different. But even that is not the point.
The point is that Uncle Bob is writing about his own experience with the language that he finds fascinating. He writes about his experience and he gets to choose how he writes it. If anyone disagrees (plenty people do, I suppose) they are very well entitled to write about their experience themselves.
I don’t want to sound like an asshole, but what exactly is his experience besides teaching and writing books ? Cause we see so many people advocating for specific language/technology without any substantial real world experience.
A professional advocate advocating for something is a signal too
Yes, it’s called Appeal to Authority.
I’m also not convinced he’s much of an authority. I’d say he’s a zealot. His tirades against types are tired. His odes to discipline are masturbatory. His analogies… well… This is the same guy who said C++ is a “man’s language” and that you need big balls to write it.
His analogies… well… This is the same guy who said C++ is a “man’s language” and that you need big balls to write it.
This is called an ad hominem. If you’re going to be a stickler about logical fallacies I’m surprised that you can’t even make it a few sentences without contradicting yourself. Are they important or not?
A professional advocate advocating for something is a signal too
This is called inductive reasoning. Given some evidence, such as a well-regarded professional advocating for some tool, we can try to generalize that evidence, and decide the tool has a good chance of being useful. You’ve surely heard of Bayesian probability; signals exist and they’re noisy and often incorrect but minding them is necessary if you want to make any sense of the world around you.
Yes, it’s called Appeal to Authority.
Logical fallacies only really apply when you’re working in the world of what’s called deductive reasoning. Starting from some premises which are assumed to be true, and moving forward using only techniques which are known to be sound, we can reach conclusions which are definitely true (again, assuming the premises). In this context, the one of deductive reasoning, appeal to authority is distinctly unsound and yet quit common, so it’s been given a nice name and we try to avoid it.
Tying it all together, the parent is saying something like “here’s some evidence”, and you’re interjecting with “evidence isn’t proof”. Great, everybody already knew that wasn’t proof, all that we’ve really learned from your comment is that you’re kind of rude.
Fallacies can apply to inductive arguments too, but you are right in that there’s an important distinction between the two types and how they differ. I would say that the comment you’re replying to is referring to the idea of informal fallacies in the more non-academic context. The Stanford encyclopedia has a good in-depth page about the term.
This thread started with, “Things like this are why I don’t trust Martin’s opinions.” Uncle Bob’s star power (or noteriety) and whether that qualifies as social proof or condemnation, is the point of the discussion, not a distraction.
The point is that Uncle Bob is writing about his own experience with the language that he finds fascinating. He writes about his experience and he gets to choose how he writes it.
I wouldn’t be complaining if he was just sharing a language he liked. The problem is he’s pushing clojure as the best language for (almost) everything. Every language has tradeoffs. We need to know those to make an informed decision. Not only is he not telling us the tradeoffs, he’s saying there aren’t any! He’s either naïve or disingenuous, so why should we trust his pitch?
The problem is he’s pushing clojure as the best language for (almost) everything.
That’s not what he said though. The closest he came to that is:
Building large systems is Clojure is just simpler and easier than in any other language I’ve used.
Note the qualification: ‘… than any other language I’ve used’. This implies there may well be languages which are easier for building large systems. He just hasn’t used them.
Not only is he not telling us the tradeoffs, he’s saying there aren’t any!
He repeated, three times for emphasis, that it doesn’t have static typing. And that it doesn’t give you C-level performance.
Note the qualification: ‘… than any other language I’ve used’. This implies there may well be languages which are easier for building large systems. He just hasn’t used them.
We need to consider the connotations and broader context here. He frames the post with
I’ve programmed systems in many different languages; from assembler to Java. I’ve written programs in binary machine language. I’ve written applications in Fortran, COBOL, PL/1, C, Pascal, C++, Java, Lua, Smalltalk, Logo, and dozens of other languages. […] Over the last 5 decades, I’ve used a LOT of different languages.
He doesn’t directly say it, but he’s really strongly implying that he’s seen enough languages to make a universal judgement. So “than anything other language I used” has to be seen in that context.
Nor does he allow special cases. Things like
But what about Javascript? ClojureScript compiles right down to Javascript and runs in the browser just fine.
Strongly connotating that “I’m writing frontend code for the web” is not a good enough reason to use Clojure, and he brushes off the lack of “C-level performance” with
But isn’t it slow? … 99.9% of the software we write nowadays has no need of nanosecond performance.
If Clojure is not the best choice for only 0.1% of software, or even 5% of software, that’s pretty darn close to “best language for (almost) everything.”
He repeated, three times for emphasis, that it doesn’t have static typing.
He repeats it as if the reader is hung up on that objection, and not listening to him in dismissing it. Note the increasing number of exclamations he uses each time. And he ends with
OK, I get it. You like static typing. Fine. You use a nice statically typed language, and I’ll use Clojure. And I’ll be in Scotland before ye.
Combined with his other posts (see “The Dark Path”), he doesn’t see static typing as a drawback. We can infer it as a drawback, but he thinks we’d be totally wrong in doing so.
You have to explain both examples for them to make sense. What does map do? How do you change sqr out for a different function? If you learn the purpose of the snippet, or the semantics of each of the individual elements, you can understand either the J or Clojure example just as well as the other (if your understanding of both languages is equal).
Also the meat of the article is trying to convince the reader to use Clojure (by explaining the syntax and semantics, comparing its syntax to two of the big 5 languages, and rebutting a bunch of strawman arguments - nothing particularly in-depth). I don’t see a balance of pros and cons that would be in a true account of an experience learning and using the language, including more than just a bullet point on the ecosystem, tooling, optimisation, community, etc.
I am sure that any programmer that has any experience in any language would guess that you change sqr out for a different function by typing the name of that other function. For example, you compute exp instead of sqr by, well, typing “exp” instead of “sqr”.
The same with map. Of course that someone has to know what particular function does to be able to use it effectively. The thing with Clojure (and other Lisps) is that it is enough to know that. You don’t need special case syntax rules. Any expression that has pretty much complex semantics is easy to write following a few basic rules.
I understand the benefits of the uniformity of Lisp, but my point was just that you can’t really say that (map sqr (range 25)) is any more or less understandable than *: i. 25 if you know the purpose of the expressions and the semantics of their constituent parts. And given that knowledge, you can reasonably make substitutions like exp for sqr or ^: for *: (though I would end up consulting a manual for the exact spelling).
Further experimentation would require more knowledge of either language. For instance, why if isn’t a function in Clojure, or why lists don’t have delimiters in J. It’s all apples and oranges at this superficial level.
My version of Clojure doesn’t define sqr—is that built in?
That aside, I don’t find either version very easy to explain to someone who isn’t already experienced with functional programming. What does “map” mean? How does it make sense that it takes a function as an argument? These seem obvious once you’ve internalized them, but aren’t easy to understand from scratch at all.
If I were reviewing this code, I would suggest they write (for [x (range 25)] (* x x))
Of course that one has to understand the semantics of what they’re doing. But, in Clojure, and Lisps it is enough to understand the semantics, while in most other languages, one has to additionally master many syntax rules for special cases.
Closure has quite a lot of special syntax compared to many Lisps. for example, data type literals and other reader macros like literal lambdas, def forms, let forms, if forms and other syntax macros like -> are all built in. Each of these has their own special rules for syntax and semantics.
We’re on the same page I think, except that I think knowledge of semantics should be enough to understand any language. If you see a verb and a noun in close proximity, you’d be able to make a good guess as to what’s happening regardless of the glyphs representing their relationship on screen.
If you want a language that emphases semantics over syntax, then APL is the language for you! There are just a few things to understand about syntax, in order of importance.
Array literals
Numeric arrays are just numbers separated by spaces. Negative numbers are prefixed with ¯. Some dialects have special-case syntax for complex or rational numbers: 42 3.14 1J¯4
Character arrays are just text delimited by '' quotes. Doubling the quote inside an array escapes it: 'is' or 'isn''t'
Array indexing with [] braces: 'cafe'[3 2 1 4] ←→ 'face' (Many APLers have a disdain for this form because it has some inconsistency with the rest of the language.)
Function definitions
Inline anonymous “direct” functions delimited by {} braces.
Traditional named functions defined by the ∇ form.
Statement sequencing with ⋄ (Mainly useful for jamming more code into a single line)
From there, the grammatical rules are simple and natural in the form of verb noun or noun verb noun or verb adverb noun etc. Probably the most difficult thing to learn and remember is that there is no operator precedence and evaluation reduces from right-to-left.
When I’m programming in APL, I rarely think about the syntax. When I’m programming in Clojure, syntax is often a concern. Should I use map or for? Should I nest these function calls or use ->?
True enough. However, at least in Clojure, macros are pretty deliberately limited so as not to allow drastically changing the look-and-feel of the language. So I’m pretty sure every macro you’ll come across (except I guess reader macros) will have the same base syntax, (a b ...).
So it’s not “Becoming a 10x Developer”, it’s “10 Ways to be a Better Teammate”. Anyway, clickbait title from an author proud of her titles - Head Mugwump, Software Princess, Software Warrior Princess …
The title is clickbaity, but it’s not something other authors haven’t stated similarly. If you can through teamwork get your teammates to work more effectively and not become blocked, then you are far more than a 10x developer. There is wisdom in not fetishizing individual progress. Well at least if you are the person who owns the business. If you’re the worker bee then the only thing that matters is the appearance of your progress. You can appear to be a 10x by floundering everyone around you too… We had a guy who did that for several years before management figured out he wasn’t actually very good, he was just effective at draining the work capacity of his peers.
I wasn’t able to find titles on the article you were describing, though I don’t think those count as real titles, they sound more like twitter culture.
There’s a kernel of an idea here that the author doesn’t state explicitly, and others like Fred Brooks have. The idea is that no matter how capable any particular developer is, there is always a limit. One of the ways a capable developer can increase their productivety is to lead/build a team of highly productive developers. This author provides some ideas on behaviors that can benefit such a team. I don’t think there’s enough here to make an ordinary team a high performing team though.
I personally have had some success leading teams. The approach I take is that of a coach, and listening/observing to what each member needs from a leader. Some require constant coaching and guidance until a proficiency level is reached. Others take off on their own, and only need the lead for occassional guidance. A quote I really like is “the tide raises all boats”. The idea being the create conditions so all team members can improve.
So what are some coaching tips, or areas to concentrate on? Some examples I offer; using version control effectively, using development tools effectively, reading and interpreting requirements, when making assumptions is appropriate, and when seeking guidance from stake holders is paramount.
But ultimately, a lot of a teams productivety can be beyond it’s level of influence. For example in low function oranizations with chaotic product and project management, where requirements and priorities shift like the breeze off of a dead sea, delivering anything is often near impossible.
I spend a lot of time during the year watching conference talks and I love sharing ’em.
My favourite (off the top of my head): Principles of Technology Leadership - Bryan Cantrill. Bryan Cantrill is easily one of my favourite speakers and this talk addresses the relationships between principles+values and software, something that I’ve been thinking about a lot lately in one form or another. I think a lot about what role software plays in society and how software developers and software companies can shape society for better or worse and this talk was right up my alley.
Honourable mentions (really just looking through my YouTube favourites & history):
I downvoted you as a troll because you watched an hour long talk (giving you the benefit of the doubt that you watched the whole thing), then took 30 seconds to call it bullshit without making any real arguments or providing any worthwhile input.
You think it’s bullshit. Neat. Anything interesting or substantial to add, or did you just really want us to know how you felt?
I just said its a bullshit, relax. And yeah, I think it’s bullshit that a single cry baby can shutdown application because the application cannot understand how the cry baby feels.
PS: Understanding hour long talk does not require a time consuming deep thinking process
People should basically always feel like they can update their kernel
and simply not have to worry about it.
I refuse to introduce “you can only update the kernel if you also
update that other program” kind of limitations. If the kernel used to
work for you, the rule is that it continues to work for you.
And I seriously will refuse to take code from people who do not
understand and honor this very simple rule.
What a difference between his first post and this one. In the first one he comes off like a colossally toxic asshat. I know this is no surprise to anyway, but still. That kind of behavior is not OK. Period.
This post on the other hand is clear headed and explanatory. It lays out the rules and why it’s important to follow them.
“That behavior is not OK” is equivalent to “I am offended”, for this case.
For all types of behavior, you can always find someone that thinks it is not OK. Should it matter? It would be severly limiting for everyone on a place like the Internet.
It’s not “I am offended”, but rather probably 95% of people would be offended if they would hear something like this headed their way. Linus probably forgot how it’s like to hear this level of toxic communication because nobody speaks with him like that. I know his “ideology” behind his behavior (he talked about this several times), but honestly saying such “sh**” to people is low, and most people are above that, that’s why he stands out.
Toxic means that it is in some way damaging to a relationship between two individuals, groups, etc. In this case it is indeed toxic because it seeks to gain in some goal at the cost of the relationship with the submitters. Toxic isn’t strictly bad, sometimes a goal is so important that you need to break the relationship, however you should always choose the least toxic strategy that will ensure success. After all who knows when you’re going to need those people’s help in the future.
In summary, dark_grimoire seems to have a correct understanding of toxic, and mytrile does not which I assume is why they are being downvoted.
It’s already limiting though – many people silently stop contributing when they receive messages like this or never consider contributing in the first place. This means the negative impact is hidden. Since it’s hidden, it becomes much easier to defend the status quo when an alternative might result in a better kernel.
By the same logic, the positive impact is also hidden. Because it is conceivable that without these messages, the kernel might have imploded upon itself, and the prevention of said implosion is doubtlessly positive.
If you are going to argue with hidden stuff then it goes both ways.
Do you really believe that it’s not possible to enforce rules and maintain high standards without calling people idiots, their contributions garbage, and so on?
I can certainly believe the parent comment, as it’s something I hear regularly, from people who decide not to get involved in projects/make further contributions/pursue opportunities at companies/etc because of things like this. FWIW, one of my friends can be found in the kernel CREDITS, and decided to walk away because of the LKML.
it is conceivable that without these messages, the kernel might have imploded upon itself
As a counterpoint, I’ve worked on a project that has a similar code size, customer reach, and zero-tolerance stance on security and stability bugs as the Linux kernel: Chromium. Chromium does not have anywhere near the level of abusive discourse on its mailing list as the LKML, and it has not imploded on itself as you have suggested. So the burden of proof is on the abusive language to show it is needed and not the other way around.
I disagree. I am not offended by his behavior, I find it to be unacceptable by virtue of the fact that I feel human beings should treat each other with a modicum of respect. Linus’s communications very often do not meet that standard. Hence from my book they do not represent an acceptable way to treat people, especially people volunteering to donate time to an open source project.
I don’t think it’s fair to describe Kotlin as a superset of Java. It provides Java interoperability, but so does Clojure, which is also not a superset.
Kotlin is a distinct language. You cannot just write java code and have it run as Kotlin code, they’re too different.
My understanding of “superset” is very strict. If Kotlin were a superset of Java, then every Java program would be valid Kotlin program. This is clearly not the case, because the syntax is quite different (String bla vs bla:String).
It is arguable if C++ is a superset of C. The semantics are slightly different, for example with char.
Yeah, C++ is superset of C, Scala/Ceylon/Kotlin is superset of Java, Clojure is superset of Lisp, F# is superset of OCaml, Android is superset of Linux, etc
There’s a scala tag, just saying. Though usually Scala posts are different enough from normal Java-ecosystem posts that they do merit their own tag, not sure if the same can be said for Kotlin.
This title sounds like GitHub is preventing it when it’s just Docker lawyers sending boringly common requests to avoid names that are confusingly similar to their trademark and unauthorized use of their name/logos.
I was asked in the chat room to elaborate on why I think this is a non-story, so here’s a quick reformatting:
Docker Inc owns a trademark for software named “docker” and doesn’t want random coders to name random projects “docker” (the next-to-last example in the story) because that’s confusing to anyone who runs into it when looking for the real docker. So a lawyer sends a “hey, please stop using our trademark for your project” note, which probably uses the legal terms “cease and desist” which mean “we’re formally asking you to stop it”.
There’s also projects related to docker using their name/logo (for example docker-charm) and the lawyer is asking “Hey, please do X/Y/Z to make it explicit to the public that you’re not officially affiliated with us”. That can mean removing logos, adding disclaimers, and sometimes renaming entirely depending on what the project is doing and how paranoid the lawyer is. I specifically noticed in the docker-charm issue that the lawyer only asked that they remove the logo, not that they rename the entire projects. That’s pretty chill of Docker to recognize that someone seeing “docker-charm” will understand that this project integrates docker and charm, rather than sending “omg you can’t even say our name in your name” which a lot of laywers do.
So I really think this is nothing. Docker is being polite, restrained, and using issues to fit into projects' standard workflows. GitHub surfers won’t run into projects and be unsure if they’re seeing an official docker project or not. This looks like a model story of trademark protection to me.
It’s also worth noting that the letter says “as the first part of a repo name” (emphasis mine). So, a repo named “docker-existdb” is unacceptable to the Docker, Inc folks, but “existdb-docker” or “existdb-on-docker” might be fine.
As far as I’m concerned, this is kinda eye-roll-y but perfectly within my Realm of Acceptable Behavior by an Institution.
Yeah, I’m really surprised they opted to try and build a business off of this. I wonder how up-front their Kickstarter was about the possibility of this sort of lock-down happening. I’d be really surprised if they didn’t at least consider the possibility.
The most charitable reading is roughly: “Don’t assume users will like/use your app just because it exists. Heavily consider whether the functionality you provide is a good fit for the context of a mobile application.”
Outlook, maybe? It has some pretty heavy feature overlap, and a pretty nice UI. (Note that Outlook on iOS/Android has nothing in common with the desktop Outlook other than its ultimate purpose. I wish they’d picked a different name.)
know that this guy has mental illness, but could anyone explain how his illness made him racist and generally asshole ? Is there any explanation ?
Some mental illnesses make you terrified all the time. It didn’t make him racist but it sure breeds a mental space where racism has roots to grow. He’s still a racist asshole, and could choose not to be, but I’d imagine it’s harder to do so.
It seems like people dislike Objective C for the same reason people dislike JavaScript - it’s(was) the “only” option you can use for the specific platform and when you’re forced to use quirky language as the only option the frustration grow faster
Paywall, cant read it :(
Things like this are why I don’t trust Martin’s opinions. He didn’t say a single bad thing about Clojure, he didn’t have any nuance, he doesn’t respect the other viewpoints. He does the same thing with TDD and clean code, where it’s impossible for them to be the wrong tool. He’s been programming for five decades and still thinks in silver bullets.
For the record, his Clojure example is even shorter in J. It’s just
*: i. 25
.His example is shorter even in Clojure:
(map sqr (range 25))
but that misses the point. Both Clojure examples are easy to explain and understand, where in J it is not obvious what *: and . stand for, and how these should be changed should we wanted to compute something different. But even that is not the point.
The point is that Uncle Bob is writing about his own experience with the language that he finds fascinating. He writes about his experience and he gets to choose how he writes it. If anyone disagrees (plenty people do, I suppose) they are very well entitled to write about their experience themselves.
I don’t want to sound like an asshole, but what exactly is his experience besides teaching and writing books ? Cause we see so many people advocating for specific language/technology without any substantial real world experience.
As professional advocates go, he’s well known and (at least be me) well regarded.
A professional advocate advocating for something is a signal too… and a lot of the things he was advocating 25 years ago are still relevant today.
http://web.archive.org/web/20000310234010/http://objectmentor.com/base.asp?id=42
Yes, it’s called Appeal to Authority.
I’m also not convinced he’s much of an authority. I’d say he’s a zealot. His tirades against types are tired. His odes to discipline are masturbatory. His analogies… well… This is the same guy who said C++ is a “man’s language” and that you need big balls to write it.
This is called an ad hominem. If you’re going to be a stickler about logical fallacies I’m surprised that you can’t even make it a few sentences without contradicting yourself. Are they important or not?
This is called inductive reasoning. Given some evidence, such as a well-regarded professional advocating for some tool, we can try to generalize that evidence, and decide the tool has a good chance of being useful. You’ve surely heard of Bayesian probability; signals exist and they’re noisy and often incorrect but minding them is necessary if you want to make any sense of the world around you.
Logical fallacies only really apply when you’re working in the world of what’s called deductive reasoning. Starting from some premises which are assumed to be true, and moving forward using only techniques which are known to be sound, we can reach conclusions which are definitely true (again, assuming the premises). In this context, the one of deductive reasoning, appeal to authority is distinctly unsound and yet quit common, so it’s been given a nice name and we try to avoid it.
Tying it all together, the parent is saying something like “here’s some evidence”, and you’re interjecting with “evidence isn’t proof”. Great, everybody already knew that wasn’t proof, all that we’ve really learned from your comment is that you’re kind of rude.
Fallacies can apply to inductive arguments too, but you are right in that there’s an important distinction between the two types and how they differ. I would say that the comment you’re replying to is referring to the idea of informal fallacies in the more non-academic context. The Stanford encyclopedia has a good in-depth page about the term.
Also, not all fallacies are equal, appeal to authority may be seen as worse than ad hominem these days.
This thread started with, “Things like this are why I don’t trust Martin’s opinions.” Uncle Bob’s star power (or noteriety) and whether that qualifies as social proof or condemnation, is the point of the discussion, not a distraction.
I wouldn’t be complaining if he was just sharing a language he liked. The problem is he’s pushing clojure as the best language for (almost) everything. Every language has tradeoffs. We need to know those to make an informed decision. Not only is he not telling us the tradeoffs, he’s saying there aren’t any! He’s either naïve or disingenuous, so why should we trust his pitch?
That’s not what he said though. The closest he came to that is:
Note the qualification: ‘… than any other language I’ve used’. This implies there may well be languages which are easier for building large systems. He just hasn’t used them.
He repeated, three times for emphasis, that it doesn’t have static typing. And that it doesn’t give you C-level performance.
We need to consider the connotations and broader context here. He frames the post with
He doesn’t directly say it, but he’s really strongly implying that he’s seen enough languages to make a universal judgement. So “than anything other language I used” has to be seen in that context.
Nor does he allow special cases. Things like
Strongly connotating that “I’m writing frontend code for the web” is not a good enough reason to use Clojure, and he brushes off the lack of “C-level performance” with
If Clojure is not the best choice for only 0.1% of software, or even 5% of software, that’s pretty darn close to “best language for (almost) everything.”
He repeats it as if the reader is hung up on that objection, and not listening to him in dismissing it. Note the increasing number of exclamations he uses each time. And he ends with
Combined with his other posts (see “The Dark Path”), he doesn’t see static typing as a drawback. We can infer it as a drawback, but he thinks we’d be totally wrong in doing so.
You have to explain both examples for them to make sense. What does
map
do? How do you changesqr
out for a different function? If you learn the purpose of the snippet, or the semantics of each of the individual elements, you can understand either the J or Clojure example just as well as the other (if your understanding of both languages is equal).Also the meat of the article is trying to convince the reader to use Clojure (by explaining the syntax and semantics, comparing its syntax to two of the big 5 languages, and rebutting a bunch of strawman arguments - nothing particularly in-depth). I don’t see a balance of pros and cons that would be in a true account of an experience learning and using the language, including more than just a bullet point on the ecosystem, tooling, optimisation, community, etc.
I am sure that any programmer that has any experience in any language would guess that you change sqr out for a different function by typing the name of that other function. For example, you compute exp instead of sqr by, well, typing “exp” instead of “sqr”.
The same with map. Of course that someone has to know what particular function does to be able to use it effectively. The thing with Clojure (and other Lisps) is that it is enough to know that. You don’t need special case syntax rules. Any expression that has pretty much complex semantics is easy to write following a few basic rules.
I understand the benefits of the uniformity of Lisp, but my point was just that you can’t really say that
(map sqr (range 25))
is any more or less understandable than*: i. 25
if you know the purpose of the expressions and the semantics of their constituent parts. And given that knowledge, you can reasonably make substitutions likeexp
forsqr
or^:
for*:
(though I would end up consulting a manual for the exact spelling).Further experimentation would require more knowledge of either language. For instance, why
if
isn’t a function in Clojure, or why lists don’t have delimiters in J. It’s all apples and oranges at this superficial level.My version of Clojure doesn’t define
sqr
—is that built in?That aside, I don’t find either version very easy to explain to someone who isn’t already experienced with functional programming. What does “map” mean? How does it make sense that it takes a function as an argument? These seem obvious once you’ve internalized them, but aren’t easy to understand from scratch at all.
If I were reviewing this code, I would suggest they write
(for [x (range 25)] (* x x))
Of course that one has to understand the semantics of what they’re doing. But, in Clojure, and Lisps it is enough to understand the semantics, while in most other languages, one has to additionally master many syntax rules for special cases.
Closure has quite a lot of special syntax compared to many Lisps.
for
example, data type literals and other reader macros like literal lambdas,def
forms,let
forms,if
forms and other syntax macros like->
are all built in. Each of these has their own special rules for syntax and semantics.We’re on the same page I think, except that I think knowledge of semantics should be enough to understand any language. If you see a verb and a noun in close proximity, you’d be able to make a good guess as to what’s happening regardless of the glyphs representing their relationship on screen.
If you want a language that emphases semantics over syntax, then APL is the language for you! There are just a few things to understand about syntax, in order of importance.
¯
. Some dialects have special-case syntax for complex or rational numbers:42 3.14 1J¯4
''
quotes. Doubling the quote inside an array escapes it:'is'
or'isn''t'
[]
braces:'cafe'[3 2 1 4]
←→'face'
(Many APLers have a disdain for this form because it has some inconsistency with the rest of the language.){}
braces.⋄
(Mainly useful for jamming more code into a single line)From there, the grammatical rules are simple and natural in the form of
verb noun
ornoun verb noun
orverb adverb noun
etc. Probably the most difficult thing to learn and remember is that there is no operator precedence and evaluation reduces from right-to-left.When I’m programming in APL, I rarely think about the syntax. When I’m programming in Clojure, syntax is often a concern. Should I use
map
orfor
? Should I nest these function calls or use->
?None of those are syntax.
map
is a function and the rest are macros. They’re all inside the existing Clojure syntax.https://clojure.org/reference/macros
True enough. However, at least in Clojure, macros are pretty deliberately limited so as not to allow drastically changing the look-and-feel of the language. So I’m pretty sure every macro you’ll come across (except I guess reader macros) will have the same base syntax,
(a b ...)
.This is really begging for implementation of Rust for TensorFlow. Maybe I should do this.
https://github.com/tensorflow/rust
Swift for TensorFlow is not TensorFlow Swift binding, it’s something different.
So it’s not “Becoming a 10x Developer”, it’s “10 Ways to be a Better Teammate”. Anyway, clickbait title from an author proud of her titles - Head Mugwump, Software Princess, Software Warrior Princess …
The title is clickbaity, but it’s not something other authors haven’t stated similarly. If you can through teamwork get your teammates to work more effectively and not become blocked, then you are far more than a 10x developer. There is wisdom in not fetishizing individual progress. Well at least if you are the person who owns the business. If you’re the worker bee then the only thing that matters is the appearance of your progress. You can appear to be a 10x by floundering everyone around you too… We had a guy who did that for several years before management figured out he wasn’t actually very good, he was just effective at draining the work capacity of his peers.
I wasn’t able to find titles on the article you were describing, though I don’t think those count as real titles, they sound more like twitter culture.
There’s a kernel of an idea here that the author doesn’t state explicitly, and others like Fred Brooks have. The idea is that no matter how capable any particular developer is, there is always a limit. One of the ways a capable developer can increase their productivety is to lead/build a team of highly productive developers. This author provides some ideas on behaviors that can benefit such a team. I don’t think there’s enough here to make an ordinary team a high performing team though.
I personally have had some success leading teams. The approach I take is that of a coach, and listening/observing to what each member needs from a leader. Some require constant coaching and guidance until a proficiency level is reached. Others take off on their own, and only need the lead for occassional guidance. A quote I really like is “the tide raises all boats”. The idea being the create conditions so all team members can improve.
So what are some coaching tips, or areas to concentrate on? Some examples I offer; using version control effectively, using development tools effectively, reading and interpreting requirements, when making assumptions is appropriate, and when seeking guidance from stake holders is paramount.
But ultimately, a lot of a teams productivety can be beyond it’s level of influence. For example in low function oranizations with chaotic product and project management, where requirements and priorities shift like the breeze off of a dead sea, delivering anything is often near impossible.
I spend a lot of time during the year watching conference talks and I love sharing ’em.
My favourite (off the top of my head): Principles of Technology Leadership - Bryan Cantrill. Bryan Cantrill is easily one of my favourite speakers and this talk addresses the relationships between principles+values and software, something that I’ve been thinking about a lot lately in one form or another. I think a lot about what role software plays in society and how software developers and software companies can shape society for better or worse and this talk was right up my alley.
Honourable mentions (really just looking through my YouTube favourites & history):
The Impermanence of Software - Andy Croll
I can’t describe this talk without selling it short. This is a great (and emotional) talk.
Git Driven Refactoring - Ashley Ellis Pierce
A talk on how to design software using Git (kinda maybe GitHub to a greater degree).
Technically Wrong: Sexist Apps, Biased Algorithms, and Other Threats of Toxic Tech - Sara Wachter-Boettcher
I bought her book last week and plan on reading it this month.
Building a Skyscraper with Legos: The Anatomy of a Distributed System - Tyler McMullen
A neat talk about distributed systems from (sorta) first principles.
I’m not a Ruby developer but boy oh boy does RubyConf and RailsConf have some great talks year after year.
My AI assistant does not understand me, this tech is toxic. So much bullshit in this talk
I downvoted you as a troll because you watched an hour long talk (giving you the benefit of the doubt that you watched the whole thing), then took 30 seconds to call it bullshit without making any real arguments or providing any worthwhile input.
You think it’s bullshit. Neat. Anything interesting or substantial to add, or did you just really want us to know how you felt?
I just said its a bullshit, relax. And yeah, I think it’s bullshit that a single cry baby can shutdown application because the application cannot understand how the cry baby feels.
PS: Understanding hour long talk does not require a time consuming deep thinking process
It took more time to write this blog post than trying to learn Go, so no surprise here
His stance is laid out more clearly later in the thread.
Also relevant is John Johansen’s response.
What a difference between his first post and this one. In the first one he comes off like a colossally toxic asshat. I know this is no surprise to anyway, but still. That kind of behavior is not OK. Period.
This post on the other hand is clear headed and explanatory. It lays out the rules and why it’s important to follow them.
Maybe Linus just needs a 1h send buffer? :)
“That behavior is not OK” is equivalent to “I am offended”, for this case.
For all types of behavior, you can always find someone that thinks it is not OK. Should it matter? It would be severly limiting for everyone on a place like the Internet.
It’s not “I am offended”, but rather probably 95% of people would be offended if they would hear something like this headed their way. Linus probably forgot how it’s like to hear this level of toxic communication because nobody speaks with him like that. I know his “ideology” behind his behavior (he talked about this several times), but honestly saying such “sh**” to people is low, and most people are above that, that’s why he stands out.
Personally this power relationship is why I’m against BDFLs once a project reaches a certain size.
I agree in principle. In practice I have to wonder - what are the alternatives? Design by committee has some well known flaws :)
Do you even know what toxic means ?
Toxic means that it is in some way damaging to a relationship between two individuals, groups, etc. In this case it is indeed toxic because it seeks to gain in some goal at the cost of the relationship with the submitters. Toxic isn’t strictly bad, sometimes a goal is so important that you need to break the relationship, however you should always choose the least toxic strategy that will ensure success. After all who knows when you’re going to need those people’s help in the future.
In summary, dark_grimoire seems to have a correct understanding of toxic, and mytrile does not which I assume is why they are being downvoted.
It’s already limiting though – many people silently stop contributing when they receive messages like this or never consider contributing in the first place. This means the negative impact is hidden. Since it’s hidden, it becomes much easier to defend the status quo when an alternative might result in a better kernel.
By the same logic, the positive impact is also hidden. Because it is conceivable that without these messages, the kernel might have imploded upon itself, and the prevention of said implosion is doubtlessly positive.
If you are going to argue with hidden stuff then it goes both ways.
Do you really believe that it’s not possible to enforce rules and maintain high standards without calling people idiots, their contributions garbage, and so on?
I can certainly believe the parent comment, as it’s something I hear regularly, from people who decide not to get involved in projects/make further contributions/pursue opportunities at companies/etc because of things like this. FWIW, one of my friends can be found in the kernel CREDITS, and decided to walk away because of the LKML.
As a counterpoint, I’ve worked on a project that has a similar code size, customer reach, and zero-tolerance stance on security and stability bugs as the Linux kernel: Chromium. Chromium does not have anywhere near the level of abusive discourse on its mailing list as the LKML, and it has not imploded on itself as you have suggested. So the burden of proof is on the abusive language to show it is needed and not the other way around.
I disagree. I am not offended by his behavior, I find it to be unacceptable by virtue of the fact that I feel human beings should treat each other with a modicum of respect. Linus’s communications very often do not meet that standard. Hence from my book they do not represent an acceptable way to treat people, especially people volunteering to donate time to an open source project.
Who are you to say what’s OK?
He can certainly say what’s OK and NOT OK in his opinion.
Since when Scala is smaller niche language compared to Ruby ?
Does it have adds inside ?
We already have the
java
tag, for the moment.Also, when requesting a new tag, it’s usually best to list relevant submissions in support of an assertion that it’d help.
Right, but Java is not Kotlin. It’s a different language.
I’ve updated my original post with some relevant submissions.
I don’t think it’s fair to describe Kotlin as a superset of Java. It provides Java interoperability, but so does Clojure, which is also not a superset.
Kotlin is a distinct language. You cannot just write java code and have it run as Kotlin code, they’re too different.
We also don’t have a “Clojure” tag :(
lisp
+java
= Clojurelikewise,
dotnet
+ml
= F#My understanding of “superset” is very strict. If Kotlin were a superset of Java, then every Java program would be valid Kotlin program. This is clearly not the case, because the syntax is quite different (
String bla
vsbla:String
).It is arguable if C++ is a superset of C. The semantics are slightly different, for example with char.
Yeah, C++ is superset of C, Scala/Ceylon/Kotlin is superset of Java, Clojure is superset of Lisp, F# is superset of OCaml, Android is superset of Linux, etc
There’s a scala tag, just saying. Though usually Scala posts are different enough from normal Java-ecosystem posts that they do merit their own tag, not sure if the same can be said for Kotlin.
This is a great qualifier for passing the tag, I think. Either that or remove Scala and Java and just use JVM to encapsulate them all.
I like the JVM tag idea since dotnet languages don’t get their own tags, it would be more consistent. Either that or add C# and F# tags.
This title sounds like GitHub is preventing it when it’s just Docker lawyers sending boringly common requests to avoid names that are confusingly similar to their trademark and unauthorized use of their name/logos.
I was asked in the chat room to elaborate on why I think this is a non-story, so here’s a quick reformatting:
Docker Inc owns a trademark for software named “docker” and doesn’t want random coders to name random projects “docker” (the next-to-last example in the story) because that’s confusing to anyone who runs into it when looking for the real docker. So a lawyer sends a “hey, please stop using our trademark for your project” note, which probably uses the legal terms “cease and desist” which mean “we’re formally asking you to stop it”.
There’s also projects related to docker using their name/logo (for example docker-charm) and the lawyer is asking “Hey, please do X/Y/Z to make it explicit to the public that you’re not officially affiliated with us”. That can mean removing logos, adding disclaimers, and sometimes renaming entirely depending on what the project is doing and how paranoid the lawyer is. I specifically noticed in the docker-charm issue that the lawyer only asked that they remove the logo, not that they rename the entire projects. That’s pretty chill of Docker to recognize that someone seeing “docker-charm” will understand that this project integrates docker and charm, rather than sending “omg you can’t even say our name in your name” which a lot of laywers do.
So I really think this is nothing. Docker is being polite, restrained, and using issues to fit into projects' standard workflows. GitHub surfers won’t run into projects and be unsure if they’re seeing an official docker project or not. This looks like a model story of trademark protection to me.
It’s also worth noting that the letter says “as the first part of a repo name” (emphasis mine). So, a repo named “docker-existdb” is unacceptable to the Docker, Inc folks, but “existdb-docker” or “existdb-on-docker” might be fine.
As far as I’m concerned, this is kinda eye-roll-y but perfectly within my Realm of Acceptable Behavior by an Institution.
Sure, but Github will enforce the request
It’s never gotten that far.
citation needed
https://help.github.com/articles/dmca-takedown-policy/
DMCA is for copyright, not trademarks.
This is a non-story. This is normal, polite trademark enforcement.
As far as I understand this would only apply if I reuse Docker’s logo or other artwork for my own project.
Good article, but I think I’d be more interested in “Acquiring fast.com”
In this regard also slow.com
slow.com is blocked here at work, supposedly it’s “Pornography”. It would be awesome is Netflix was running that too.
slow.com is owned by Netflix and as pilkch said it redirects to fast.com
Is this some kind of hipster thing - “Fast is the new slow”? :)
No, orange is the new black!
slow.com seems to redirect to fast.com so I wouldn’t be surprised if they own both.
Alternative title: “It’s a gamble to build your product on top of undocumented/unsupported diagnostic interfaces”
It’s not a gamble when apple is involved, it’s just stupid decision
Yeah, I’m really surprised they opted to try and build a business off of this. I wonder how up-front their Kickstarter was about the possibility of this sort of lock-down happening. I’d be really surprised if they didn’t at least consider the possibility.
So it’s basically: “I failed at X so you shouldn’t be doing X”
The most charitable reading is roughly: “Don’t assume users will like/use your app just because it exists. Heavily consider whether the functionality you provide is a good fit for the context of a mobile application.”
https://pbs.twimg.com/media/CEuxfqMWAAAg6RC.png
I love Mailbox!
Does anyone have any recommendations for a replacement?
Outlook, maybe? It has some pretty heavy feature overlap, and a pretty nice UI. (Note that Outlook on iOS/Android has nothing in common with the desktop Outlook other than its ultimate purpose. I wish they’d picked a different name.)
Note that mobile “Outlook” will store credentials on Microsoft-owned server.
I like Outlook on iOS a great deal. It really is a well thought out and well behaved IMAP client.
Google Inbox is carbon copy of Mailbox.
On iOS, Dispatch seems nice. It offers a lot of way to automate your email, although it doesn’t have the “save for later” feature of Mailbox.
If you use gmail https://inbox.google.com is at feature-parity with Mailbox.
I know that this guy has mental illness, but could anyone explain how his illness made him racist and generally asshole ? Is there any explanation ?
Some mental illnesses make you terrified all the time. It didn’t make him racist but it sure breeds a mental space where racism has roots to grow. He’s still a racist asshole, and could choose not to be, but I’d imagine it’s harder to do so.
yawn
Checked out of the Node.js drama months ago; only seems to have gotten worse.
I’m waiting for Zed Shaw to come out with “Node is a Ghetto”.
Zed Shaw won’t come out with “Node is a Ghetto” since he’s not interested in such kind of “technology”