44,386 karma · joined August 30, 2007
http://dbmarkham.com/
daniel@danielbmarkham.com
Not an easy place to be.
If, however, you've accumulated a lot of research on a personal topic and want to gather the threads together and reach some personal conclusions, long-form non-fiction is probably the only tool that's going to work, whether you publish or not.
There are many more indirect benefits for various niche genres. If you reduce it all to money, you're not going to be happy. Everybody can publish now and as a result of that, most books are not that great. One wag said that the great majority of books published today shouldn't be published at all. I tend to agree, at least in terms of publishing for a wide audience. It's just that book publishing doesn't have to be like that.
I'm starting on another book this year. Each of my previous books has had less than 1,000 readers and I'm happy as a clam. In fact, I really don't want to start publishing to a mass audience. In my opinion, looking at writing only in terms of a mass audience is the best way to start writing a lot of highly-targeted trash. Everybody is already trying to write the next version of serialized pulp fiction. That's why, in my opinion, no matter how well you write for any sized audience at all it's only going to end up being mediocre (by comparison). If, however, you write reasonably well on a laser-focused extremely small niche that you have great passion for? You win even if you get only seven readers.
Beat the game by not playing by the rules they give you.
For the incredibly small amount that I know, it looks like a game changer. (Like everything else, though, there's a long road from theory to practice. Implementation is going be very tough)
Having said that, Factorio is the bomb. I like the point this essayist makes about closed vs. open-ended problem-solving. There's also the matter of building something for now vs. building something for later. Probably the biggest mistake I see in shops are people building for the endgame when they don't even have a basic and simple value loop set up. Factorio teaches this by direct practice and interaction. Because solving coding problems can take a long time, many times programmers can go an entire career without actually learning how to solve problems, instead just learning more and more about how to add solution details.
For some, if they're not going to learn good architecture evolution here they'll never grok it.
Recommended. But beware: it's a freaking huge time sink. I had to take it off all but one of my PCs.
Why? Because almost as quickly as we started implementing UI/UX, we started running telemetry on them. At first we did a lot of user workshops. Later we got much more sophisticated.
The problem is that people use interfaces to solve problems they have, perform work they need to do, and to otherwise help them and others reach common goals. When the character "Mr. Sulu" on the ancient Star Trek TOS has that little viewer thing come up, it's apparent to both the audience and the other fictional characters in that universe what Sulu is doing and why. Perhaps a few lines later one of the other characters in that universe might comment on Sulu's goals, after all, they all can both observe him and how he's solving a problem. Sulu is as much a UI for the crew as that cool little scope is. The focus is on goals, plot movement.
Why is that important? Because all of that watching people and collecting data is not able to understand any of that. Instead, all we can really tell is whether or not a set of user interface tools are used a lot or not, and if so, how they're used. We've got a lot of "how" but no "why"
So we optimize around getting people to use the tools more. After all, that's all we've got. UI/UX tools become much more about working the human than they are about the human working the tool.
Windows 95 is very close to the inflection point of this story. We knew just enough to make things cooler and cooler, yet there was an overarching concern that computers do something useful.
If you watch old commercials for tech, the emphasis is all about how useful it is: it teaches your kids, it predicts the stock market, and so on. Steve Jobs realized that while that remains a wonderful rationale, it was all bullshit as far as making and selling hardware. So he began emphasizing the coolness and disruptive nature of the UI. Buy it because it's freaking cool as hell and looks like the best video game you've ever seen. If anybody gives you a hard time, fall back to the old "But I've got a worldwide information system in my pocket" stuff. It has the benefit of being true without being especially relevant.
I miss the pinball game.
Types can completely replace tests. The tests described in the article are ATDD tests, not TDD or unit tests. They're the result of a specific business workflow that has a goal of making sure you're building things that are useful. If you don't have that workflow, you can just use types to do the same work.
And nope, no magic tool required. Sure, tooling and automation would be really cool, much the same as having a C compiler beats the heck out of writing assembly, but it's not directly relevant to the points in the essay.
The station was a part of a chain of dozens. The owner was a well-known local multimillionaire. For whatever reason, he happened to be at my station on my first day at work.
He and I spent over an hour pumping gas, checking oil, doing an oil change, patching tires, and so forth.
I learned a lot more than simply how to work at a service station that day. I continued working at that station for over a year. Never saw the guy again. As I recall, when I started he had stores over half-a-dozen states.
Example implementations are also available for deeper inspection on GitHub. See link in article.
2. "...coupled with the way most developers conflate subtypes with subclasses..." Speaking as somebody who both likes SOLID and could write this essay/present the deck, I think there's a lot of confusion to go around. There are a lot of guys coding classes using rules better suited for types. There are a lot of guys applying OO paradigms to functional code and vice-versa. In general, whenever we swing from one side to the other on topics, it's a matter of definitions. There is no such thing as "code". There's "thinking/reasoning about code" and there's coding. You can't take the human element out and reason abstractly about the end product. Whatever the end product is, it's a result of one/many humans pounding away on keyboards to get there.
3. My opinion, for what it's worth: as OO took off, we had to come up with heuristics as to how to think about grouping code into classes, and do it in such a way that others might reasonably get to the same place ... or at least be able to look at your code and reason about how or why you did it. That's SOLID and the rest of it. Now we're seeing the revenge of the FP guys, and stuff like SOLID looks completely whack to them, as it should. It's a different way of thinking about and solving problems.
ADD: Trying to figure out who's right and who's wrong is a (philosophical) nonsense question. It's like asking "which smell is plaid?" Whatever answer you get is neither going to provide you with any information or help you do anything useful in the future. (Shameless plug: Just submitted an essay I wrote last week that directly addresses reasoning about types in a large app)
I don't agree with the conclusions of the essayist, but there's something there. Verisimilitude is gone. Real people are gone. In their place, there's a clinical, sterile plastic automaton put together by marketing departments. Even when there's nudity and sexuality, it feels like a paint-by-the-numbers thing and not storytelling.
Over the last decade or two, I stopped watching broadcast commercial TV in the U.S. I began to realize that the choice of dramas and advertisers told me a lot more about what the creators thought of their audience and not so much about life and human relations. Cinema has gone to that same place. Now, a common refrain about a classic movie from the past is "They could never make something like that today", and people who say that aren't referring to easy problems with material like racism. It's not the content. The quality has drastically changed. I used to leave a good movie wondering about my own life and the choices I might make. For a really good flick, I could dwell on the issues involved for weeks. Now I leave saying "Wow! Wasn't that really cool?!?" and I've forgotten anything important or meaningful by the time I've gotten to the (metaphorical) parking lot.
There are little flashes. Occasionally big name stars and producers will create a one-of drama that really says something about the human condition. Those movies are getting fewer and the time between them grows. Streaming TV promised a new Golden Age for long-format serial drama. But the glorious days of a thousand Sopranos are not materializing. Instead it's looking a lot like reversion to the mean.
There is a dead, empty, data-driven blandness to modern entertainment. Not pleasant to end up here when we started off with such promise.
Quite related: I published this a couple of days ago. Been debating whether or not to submit it here. It's a difficult subject. It's extremely important, but sadly simply because it's important doesn't mean people will be able to accept or understand it.
https://danielbmarkham.com/its-time-to-intellectually-grow-u...
tl;dr This is a problem because it's not the kind of thing that people consume well. See HN reactions.
“From the earliest age, we must learn to say good-bye to friends and family. We see our parents and siblings off at the station; we visit cousins, attend schools, join the regiment; we marry, or travel abroad. It is part of the human experience that we are constantly gripping a good fellow by the shoulders and wishing him well, taking comfort from the notion that we will hear word of him soon enough. But experience is less likely to teach us how to bid our dearest possessions adieu. And if it were to? We wouldn’t welcome the education. For eventually, we come to hold our dearest possessions more closely than we hold our friends. We carry them from place to place, often at considerable expense and inconvenience; we dust and polish their surfaces and reprimand children for playing too roughly in their vicinity—all the while, allowing memories to invest them with greater and greater importance. This armoire, we are prone to recall, is the very one in which we hid as a boy; and it was these silver candelabra that lined our table on Christmas Eve; and it was with this handkerchief that she once dried her tears, et cetera, et cetera. Until we imagine that these carefully preserved possessions might give us genuine solace in the face of a lost companion...” ― Amor Towles, A Gentleman in Moscow
If other people have to use and maintain this thing we find exciting, it stands to reason that perhaps they might not find it so exciting. If social media has taught us anything, is that interactions with UXs that give us dopamine hits may not be in our own or others' best interest over the long run.
I like "make cool stuff". The focus is on the goal, not the step-by-step interaction. It directs us to the outside, where our code interacts with people, be it users or future code maintainers. It's also vague enough that all sorts of people can define it as they like.
I love exciting new tech and having fun developing. I just don't define that love by how it makes me feel. Instead, I balance how it makes me feel and how it makes others feel too. That leads to a lot of even more interesting and fun places than simply "choose exciting technology"
ADD: Put differently, you always want your goal to "pull" the required complexity out of a system. It's a forcing function. It never works well when you start with a bunch of complexity and try to push it all towards a goal. That's backwards. I think we've sold a lot of developers on the idea that with a cool enough X, they're bound to make cool things for others. After all, look how cool X is!
Doesn't work like that.
It's like many of us (and I include myself in this observation) are unable to step outside our own work and see how we actually spend our time. We become so obsessed on the goal that we lose track of how many new obstacles we put in our own way year-after-year.
pg is one of an extremely small number of high-follower folks I follow on Twitter. It's mostly because I miss his input here.
I love watching smart people discuss stuff (not pointlessly argue) so when I started here, I would post any kind of question that I thought would be interesting to see like-minded (tech) folks discuss. Things like "Is there a God?" I'd also engage with folks who had differing views in order to try to learn from them.
I remember one time I asked some kind of question that set folks off. PG came on and said something like "Why don't you guys find out more about why he's asking that question instead of trashing him so much?" (My paraphrasing and poor memory)
I think he was still asking that question when he finally left. I don't think he ever got a good answer.
pg and I probably disagree on a ton of things, but he seems interested in sharing and learning, not playing the emotional manipulation game. That's why I follow him there.
Unlike some, I have never sworn off HN and left in a huff.
HN is where I learned about the drawbacks of where internet tech was going. Many of us started with a desire to build sticky sites and apps, but as some startups mastered this, it became obvious that this was two-edged sword.
I miss PG being on, but I completely understand why he left. It got to the point where he couldn't say something as simple as "The sky is blue" without a dozen negative and nitpicking replies. No fun.
I agree with the general gist of what the author is saying, but I find that I have a lot of problems using the word "psuedophilosophy". If you want it bluntly, all philosophy is bullshit and trying to stick the word science in there does disservice to both. The longer version is that programming is applied philosophy: we meet, we learn, we define, we codify into a formal system, we use that system to explore the universe around us.
The longer version gives us a hint, a compass to find our way around in the bullshit maze (and I use "bullshit" affectionately. My only point is that philosophy is a terribly different thing from science). Where are we going? After all, I'd argue that philosophy is the mother of all sciences, including math. It's obviously critical to humanity. But in my formulation, coders use the process of philosophy to do something, agree, create, formalize, explore. We do philosophy all of the time, but we actually do it. We don't write books on it or spend much if any time quoting or hero-worshipping others who may have done bits and pieces of it 100 years ago or more.
Just this morning I ordered the Great Courses series "The Modern Intellectual Tradition: From Descartes to Derrida" I am extremely pumped to get started on it. Because of my books and my interests, I've ran across all kinds of philosophy groupies: professors, doctoral students, fans, grads who hate the subject now, etc. My take: if you don't study philosophy you're missing out on life. Some of the smartest people on the planet have spent their entire lives thinking about tough problems. Use that work. Having said that, most all of them only had a handful of good ideas and spent the rest of their career taking them too far. You have to understand that too if you're actually going somewhere with that knowledge. Otherwise you're just intellectually self-stimulating.
If you're learning stuff to go places you can always look back and ask "Where am I now that I wouldn't have been without this knowledge?" That tracks well with this author because his core complaint, whether he states it clearly or not, is that folks pick, choose, skim, and misunderstand great philosophic works as a crutch to actually understanding or teaching something. It's either a prop they use to make rhetorical points or it's a mask they use to cover up their own lack of ability. Yup, they sure do. And you can tell because when you get through reading them you're not left being able to do something you couldn't have done before. Instead your previous opinions are validated, just with bigger words and some loose-fitting historical anecdotes.
1. https://leanpub.com/u/DanielBMarkham (see brief intro videos to both books if you're interested in diving further)
2. https://twitter.com/danielbmarkham/status/135909496939971379...
and
https://twitter.com/danielbmarkham/status/135915625272354406...
There's nothing wrong with any of that. As a professional, you want to be good in multiple paradigms. The problem is that you're mixing them all up, whether you realize it or not (Most of the time, programmers don't realize it) And now, every piece of code can go down two entirely separate tracks as you suss out your architecture. Not only is that not going to work, it's going to make debugging and maintenance a nightmare.
This is very, very similar to how good C++ shops work. You've got to tightly limit the way you solve problems in order for all of the programmers involved to be to reason about the code.
I want to provide a little nuance around this, because I'd give the opposite advice.
Because F# is based on OCAML and an extremely popular IDE/framework, it is first and foremost a teaching language. In my opinion, for what it's worth, the biggest mistake other F# coders make is running off into Haskell-land and trying to drag the rest of the community with them. Yes, pure FP is love and goodness, joy and love, but that's not the place to start with your average coder who just wants to see what's cool. Fable and Elmish are
I learned functional programming by reading a lot of OCAML books and the only(!) F# book out at the time. I coded like shit. I couldn't help it; I came from a strong OO background.
But then I figured out that instead of coding everything perfectly, it was more important to finish a little bit at a time, then take a look at functional smells, things like mutation. Sometimes I could fix these smells, sometimes I couldn't. Over time I found I could fix all of them. At that point I was a functional programmer.
I love these high-level F# frameworks, and like I said it's the best way to get folks involved, but wow, folks are going to create some programming disasters using them. Yes, this happens all the time withe every new thing, but functional messes are an order-of-magnitude worse than imperative/OO ones. Good luck, guys! The destination is worth the journey.
The computer doesn't process reality, but it can keep you honest about what terms you use in your language and how those terms relate to one another. God, I hope we've learned something from all of those disasters.
You don't change the computer to solve your problem. The computer changes your understanding of what the problem is.
In general, I try to find the most general point and rebuttal as possible. These discussions tend to dive into pedantry and semantics. I'm just trying to do my part to engage the author where they are. ymmv
"...nowadays, all arguments that say that indexes should be 0-based are actually arguments that offsets are 0-based, indexes are offsets, therefore indexes should be 0-based. That’s a circular argument..."
Yes, that is a circular argument. It's not the one I would use. C made the decision that indexes and pointers are the same thing. It's a logical argument and one that's not circular. If they're separate things, then yes, you end up in a circle.
For languages that are not C-like, you could argue "pick an idiom and stick with it across multiple languages" or "make programming languages easier for humans to understand" Both of those arguments are preferential arguments. Perhaps there could be a study comparing the merits of each, but I haven't seen one yet.
I like chocolate ice cream. I like making pointers and arrays as similar as possible. I like being able to collapse pointer arithmetic down. I like doing huge mallocs and then playing around with large, empty hunks of memory. Some folks don't. I get it. Code should look like the way we think about the problem. That's an ideal state we'll never reach, but it's worthy of continued discussion.
Most folks have no concept of the types of trauma many of these children go through. Sadly, by the time the state has to step in, it's no easy journey forward. People watch movies and TV dramas about these kinds of things. It does not prepare anybody involved for the reality of the problems. I've heard second-hand stories I wish I could forget.
I thought this was comedy gold. Good hacker read for a Sunday.
Because it's a topic so easily prone to hyperbole, it helps if we can reduce it down to a few premises.
- Science is science, but the practice of science is a social system. People get tenures, jobs, promoted, invitation to speak, etc. by how well they do in the judgment of their peers
- Political systems exist for political reasons, ie, if you don't have a reproducible, falsifiable test in a feedback loop somewhere, your career and goals are all about image. There's no alternative, either for you or your field of study (That doesn't mean other sciences aren't important or aren't really science.)
- If somebody appears on TV or in the media playing the role of an expert, it is, by definition, because they wanted to appear on TV or in the media. The goals of being popular and asked about important questions and the goals of whatever your field are ... two different things. The reporter doesn't care who figured out X. They care who can bring excitement and emotion to talking about X.
- All this leads directly to the problem of the average science news consumer: any communication you receive about science or research is the result of a lot of conflicting interests. "Being good science" is way down the list, sadly. I imagine the percentage of average readers who understand p-hacking is below 5%
- None of this is a secret. The average news consumer knows it, even if they're not able to articulate it
- Add in things like the reproducibility crisis, and we've got a huge problem as a species. We've got one flashlight to light our way in the darkness and it turns out there's a loose connection in there somewhere
Put another way, I've seen a lot of bad writers. Every one of them is replete with self-encouragement and self-congratulation. (I am reminded of that little kid Ralphie writing his theme in the movie A Christmas Story) For the good writers I've seen, they don't carry that kind of self-reassured exuberance around. At best it's a measured competence.
Now that I've gotten older I've mostly given up on excelling at any kind of art. I still love and enjoy creating things, and I'm still aware of the myriad number of problem each of my works have. I just don't care as much. Instead I'm much more interested in creating things I personally find interesting or intriguing. When you catch a great picture, come up with a piece of music you love, or write an essay where it all comes together? You get a feeling of "Well hell. That's really interesting! I haven't seen those pieces like that arranged in that way. I wonder why it makes me curious and happy to contemplate?"
I joined a FB group that shared photos. I had to no-follow them. They were all really good photographers and they all took really good pictures. But how many times can you tell somebody they're good and you like their work? What I'm interested in when I look at a picture is conflict and tension. Why is that shadow there? Did you mean for the model to be in that awkward position? Those kinds of comments can easily be construed as cutting, but all I'm doing is just looking inside and riffing off the feelings I get. I don't know where the person is going, and I really don't know what they found in this image, so unless they're able to handle all of this tension, there's nothing for me to offer.
Great chat. Thanks!
In my experience in the arts, specifically music, photography, and writing, good artists are good artists because they know all of the detail and nuance of their work and they continue to be dicks to themselves. A good artist is never happy no matter what they create or what the reaction is, otherwise they would stop improving. Beethoven once famously played a piano recital so poignant that many in the audience were weeping. When finished, he stood up and laughed at them for being so simple-minded and easily manipulated.
Of course, that's just a broad generalization, and there's no excuse for being a dick to others. (Unless they ask for it). I think, however, it draws in stark relief the central question in your comment: are writers' groups for encouragement or improvement? You mentioned a bit of both, but to my untrained ear that sounds like a recipe for mediocrity. Being just motivated enough to produce various works of art that most people in your social group would never criticize to your face? That's not a personal goal.
So I think we're back to the topic of this essay, editors. Editors are there to negotiate what the author wants to do with how the world at large can consume it. They're not there to create or give their own voice. They're there to assume the role of author and advise them what needs to happen for others to better consume the art they make.
I had a friend once who loved taking pictures, as I do. We were mods on a local forum and both of us loved sharing our pictures. (This was in the early blogger days) Eventually news and politics started taking over, so we both left. He went on to do his own thing. I'll never forget what a mutual friend said about him: he just wants people to praise his pictures. Nothing else really matters. He ended up making a bit of a living doing just that. He never became famous but he understood that it was the social praise he was chasing and not the art. I consider a lot of the stuff he did cartoonish but it worked for him. To your point, he became good enough for his social group to be praised and talked about, but no more.
My best editors have always been both inside my head and brutal. They knew where I was going and they weren't shy about redlining the shit out of my text to help me get there. That hurt my feelings a lot and another person might have given up. I found it transformative. ymmv