- Don't generalize too early, which seems to address the original question pretty directly.
- Don't optimize too early.
- Maintainable > Correct > Fast. Maintainable = comprehensible. If it isn't maintainable, you won't know if it's correct. If it isn't correct, there's no point in making it fast.
- Minimize state. Deriving something from scratch every time it's needed leads to far fewer bugs, and the bugs there are probably far more obvious. Cache only when you need to for performance.
- Simplify as much as you can. This is the hardest one, because it can take a very long time to figure out all the ways in which a design that you thought was simple, turns out not to be.
- Simplify some more: The usual statement of the "simplify" rule is "as simple as possible, but no simpler". I don't think that's right. If you see a nice simplification at odds with requirements, push back on requirements.
I don't think in terms of simplification though, I see it as "write what you need, when you need it." But I absolutely agree that you should avoid generalization aggressively and optimization should rarely be on the table. I also agree about minimizing state. Do it all "on the fly" unless there's known performance hit.
After a decade or so of operating sites for programmers on the Internet, I've learned that, left by themselves, ALL programmer online sites will rapidly deteriorate into:
* I hate my job, woe is me ("I hate my job too!")
* I'm not productive any more, oh dear ("Oh my god you took the words right out of my mouth!")
* And some nonsense about H1B visas.
These kinds of conversations are endless because, I'm sad to say, they represent a common problem among programmers. Discussing it as a means of therapy is a wonderful thing, but DO IT SOMEWHERE ELSE, because Stack Exchange is 100% focused on questions with specific factual answers.
This hard and fast rule is actually WHY you love stack overflow so much. It's WHY the network works. It's WHY you click on the stackoverflow.com link in the Google results even if it's third. If we weren't strict about this stuff we wouldn't have such consistently high quality ANSWERS.
Just because "moderators" (actually, users) have deemed to close a question on Stack Exchange, doesn't mean it's a bad question, or that the person who asked it is bad. It just means that Stack Exchange is an edited, curated environment, not your livejournal. The very moderation that people complain about every time a popular question is closed is what has been making the site work so well.
But Programmers? Programmers is and always was an exception. Seriously, almost none of the questions are answerable with specific answers. It is a pit of vague non-answerable questions that don't degrade into flamewars only because they are boring. What kind of fabric is best for covering programmers' chairs?
It's not quite as hostile an approach to community building as experts-exchange, but it's close.
Edit: Another one, +28 votes, front page: "Is there a viable alternative to the agile philosophy?". I'm not making this up.
The "Is there a viable alternative to the agile philosophy?" one is from Nov 2010, a more relaxed era, when the site's scope wasn't as well defined as it is today. It was bumped on the front page by a minor edit (argh). I'm on the fence on this one, and I'd prefer it be closed by five regular users.
I can't tell if your claim is that a) You just don't want to run a site that has some good content that doesn't follow the rules, or b) you don't know how to run a site with some good content that doesn't follow the rules.
But you're definitely throwing out good content and driving away good contributors because of your inflexibility.
This desire is understandable. I sure would like to pick and choose the aspects of people's personalities that I had to deal with. But, in most cases, life doesn't work that way.
In some cases, asking us to leave behind parts of our personalities is a reasonable request. An obvious example is our employers. They want our coding ability, and would prefer we leave our sports fandom, musical choices, political opinions, relationship issues, etc. at the door before we come into the office. And since they're paying us, they get to make that request. If, say, a significant other told me to go be a sports fan somewhere else, I would probably take her up on that request, and also take along the aspects of my personality she does like.
But Stack Exchange is not paying us. Our rewards are the good feeling of helping someone out, and being part of something. Heck, you wanted to charge us money to leverage our SE work into employment opportunities.
That being the case, by locking us down like this, you are opening yourself up to competition from another site that welcomes us as whole people, not just the parts that help your site be awesome.
I want to be in places where I can be myself, which might include chuckling at the same old jokes or discussing how much my job sucks. The more SO/SE is a place where I cannot be myself, the less desirable a place it is for me to be.
One of the things SE/SO claims to be about is building a community. Well, guess what. Communities are groups of people not just their expertise in a given subject.
There's nothing stopping you from being your whole self on chat, but it's the relentless focus on signal that makes Stack Overflow what's wholly Stack Overflow.
You can't just build communities by randomly amassing people together. Communities need to have a common goal; in our case it's the building of the best goddamn Q&A sites we can possibly make out of the SE engine. That's what leads us to be "all business" on the site while wholly goofing off on chat :)
Apart from that, I agree - it's Q&A, not /r/funny, not a discussion forum. Though I haven't seen that many questions that aim to ignite such discussions.
Hiding stuff that doesn't below under the rug doesn't make the problem go away, fixing the problem does.
In a gamification environment moreover you need to make sure that the rewards are given for activities you want users to do more of. Participation in 'fun' questions is not one such thing. Since they get ALL the votes etc. they naturally attract more of the same 'fun' questions.
No, those 'fun' questions just have to go.
Time is variable with participation. By driving me off through closing and deleting things that don't fit your personal vision, you have reduced the amount of total work time available. Not just for the fun things, but for all things.
Gamification points are also not finite. But if you are really concerned with over-rewarding things that are too gosh-darned fun, just stop rewarding them. It's an easy fix. E.g., instead of marking a question closed, you mark it as just-for-fun; points stop accruing.
I guess what you could be saying is that time is finite for some particular group of people. In which case, you've introduced an us-vs-them dynamic, and are basically declaring that the system is about serving the desires of the in group, rather than all participants or all readers. In which case: have fun with your bat and ball.
1. "Fun" SO / SE questions.
2. Serious SO /SE questions.
Given this, of course you want to encourage people to choose Option 2 as much as possible.
But there's also...
3. Do something else completely unrelated to SO / SE.
Right, that's what the Stack Exchange podcast is for. (ducks)
My instincts are to vote to close, but there are just too many. Kind of makes me sad when I go to their metas, and the mods there are most definitely StackOverflow users. It seems the same standards aren't applied across the SE board. Myabe this is not a bad thing because building community, etc.
I really like the "third place" idea, but I don't think the chat rooms have been successful in realizing it. Unfortunately, people just don't use them very much--even the StackOverflow rooms rarely have anybody to talk to.
I think the fundamental problem is that discussion in other parts of the site is asynchronous, like email, while the chat rooms aren't. The comments and posts stick around and allow people to talk about something across a longer period of time, which also allows more people to join the discussion. On the other hand, chat happens immediately--it only works for the people who are there at the moment and only works while everybody is on.
There is, of course, nothing wrong with chat in general. I just don't think it's the best match for the SE format.
So, you're goofing off on chat, a discussion oriented medium, and not on Stack Exchange, a platform that's feverishly against discussions.
But on more than one occasion you've asked for Stack Exchange to change it's stance on discussion oriented questions and become more discussion friendly. Assuming that happens, how soon do you think it'll be before you dismiss Stack Exchange as goofing off?
Seriously, I don't think I would dismiss the whole of SE as goofing off if its scope boundaries were relaxed a bit.
I understand there is a tradition of slamming EE when discussing SO/SE, but "hostile" seems a stretch, at least in my experience.
I've found few technical forums online or in "real-life" that were as welcoming and community focused as Experts-Exchange.
Beyond the obvious in-question discussions, EE members communicate directly through email, instant messaging, phone calls and face-to-face meetings. EE corporate sponsors periodic meetups between administrative staff and members.
I've participated fairly regularly over the past few years and people have contacted me directly, off-site for assistance with confidential issues that couldn't be easily posted in the form of a public question. I've been made job offers, did a little contract work and simply chatted about UFC, scuba diving, beer, kids, photography, work, movies, etc.
I've had the opportunity to meet a few of the members face-to-face and, while I don't know them all well, I can honestly say they've been consistently friendly and helpful online and in-person.
Also, beyond just the "warm-fuzzy" of good-people. EE is a commercial site. The only way it can pay for its servers, employees, bandwidth, storage, etc. is through its community of customers. Sure, some people have been unhappy and left but that will be true of any service. By and large though, people come to EE and stay. If EE was truly a hostile environment it's membership base would have shriveled up years ago and the company would be gone.
Going back to SE/SO or any other Q&A forum the fundamental design of all of them is ask about something fairly specific and get answers about your topic. Comments that don't address the topic itself, no matter how insightful, true and possibly helpful they are are, by definition, off-topic and don't belong in that thread.
If I ask how to change the belts on my car and you give me an awesome recipe for apple pie, it's just not helpful and your comment should be deleted, voted down, masked, moved to new thread or otherwise discouraged/eliminated (the specific action will depend on the forum.)
The forum, as a whole, may be open to any and all discussions, but within the context of any one thread there is either implicitly (by nature of the asker's intent) or explicitly (in member agreement for a particular forum) a rule established that comments stick to the topic of that thread.
Community can actually be self-destructive somewhat in this regard. As members become familiar with each other there is often less inhibition to interject side-comments for humor or nostalgia of past discussions. Strangers, without that sense of familiarity, may refrain from joining the peanut gallery and instead stay more formal.
All Q&A forums want to stay close to the top of the Google lists. Maintaining good signal-to-noise ratios is the only way to do that. If that means truncating a few tangents in order to keep threads in line, that's good for all. As others have mentioned, the members are at the site because they like it. If they can't police themselves in such a way that the site can prosper then others must do it for them. That's not just SE/SO or EE or similar sites. The same applies to all information providers.
Keep the content useful and on-point and it'll rise in popularity. Let it drift an so will the rankings.
I looked it up now and it seems that this kind of questions are supposed to be asked on programmers.etackexchange.com!
This is what FAQ says. 2nd, 4th, 7th and 8th are exactly what this question is about!
""" Programmers — Stack Exchange is a site for professional programmers who are interested in getting expert answers on conceptual questions about software development. If you have a question about... """
1 - algorithm and data structure concepts
2 - design patterns <------
3 - developer testing
4 - development methodologies <------
5 - freelancing and business concerns
6 - quality assurance
7 - software architecture <------
8 - software engineering <------
9 - software licensing
So, Jarrod Roberson, GrandmasterB, gnat, Walter and ChrisF♦, you are all bozos, you shouldn't have closed this question.
BTW, as that discussion is closed now, we can't directly (and publicly) communicate with those mods there; so here is the only place we can rant (that is, unless there is a meta-programmers.stackexchange.com for meta discussions).
Also, four of the close voters are regular users, only ChrisF is a moderator (notice the ♦), but it doesn't really matter, as it takes 5 close votes to close a question and his otherwise supercharged close vote was a regular user vote here (being the fifth).
So, a question to our StackExchange overlords: you clearly do not believe that the popular StackExchange sites are the appropriate place for this content. With that in mind, what alternative would you recommend?
The intent of all the stack-exchange sites is to provide a high-quality resource of _answers_ for specific _questions_. If "the answer" to a question ends up being a divergent discussion, then not closing responses invites more of these types of questions. Over time that will subvert the intent of stack-exchange.
The POV of the stack-exchange folks is that there are plenty of forums for discussion, and that is NOT what they want to do. Hacker-news, however, is more free-form and definitely much better for "need advice" type questions with highly subjective answers.
That said, it is true that moderators sometimes get persnickety about what they close. I wish that at least they would be less smug and judgmental about how they do that. But oh well, it is still an awesome resource.
Assuming the question doesn't drop past the second page or so before someone who is interested in the question sees it. But yeah, is it is seen and kept alive for a few minutes, the discussion is potentially very useful.
What a business does is always an intersection of what the producers and the consumers want. If users want something divergent but reasonable, the answer shouldn't be, "Well, fuck you then." The right response is, "Boy, that's a a great opportunity."
As proof, look at Friendster. They owned the social networking space before Facebook even existed. But it had started out as a dating site, and the founder stubbornly insisted that it stay a dating site no matter what the users wanted. At this point they're not even a punchline; MySpace has now taken over the spot of best-known failure.
I've stopped contributing to StackOverflow because I'm tired of them killing good discussions. Why take the risk that yet another good answer will get eaten?
I, for one, am glad Stack Overflow is the site that it is today. There are plenty of other places on the Web for more open discussion… like here, for instance.
Original intent doesn't really matter if you intend to serve your users. What you want to do matters, and what they want to do matters. Startups are a learning process where you explore the intersection.
If you hold on too tightly to original intent, exploration is impossible. You either end up frustrated that the people won't do what you want, or you end up trying to force them to do what you want. Both suck.
What's wrong with that? Judging by the activity on the sites, they're serving plenty of users pretty well.
Personally, I think Friendster could have been something more if they had been less arrogant, more willing to listen to their users. They only had to give up the belief that the users were Doing It Wrong.
The problem I have with what Stack Overflow is similar. By your very metrics, these questions get plenty of activity, and many users feel very well served by them. What's wrong with that?
This reminds me of the founding of Adobe, when Steve Jobs told them what he wanted, as did two other companied, and the refused, saying "We have this business plan, we raised $2.5 million, and this is what we said we're going to do." Thankfully, a man named QT Wiles explained to them that "You guys are nuts. Throw out your business plan. Your customers-or potential customers-are telling you what your business should be. The business plan was only used to get you the money. Why don't you rewrite a business plan that is focused just on providing what your customers want?"
This is the same position. SE needs to focus on what the customers want.
Also, I don't get the idea of "protected questions" - the ones marked by:
"This question is protected to prevent "thanks!", "me too!", or spam answers by new users. To answer it, you must have earned at least 10 reputation on this site."
It's a great site that fills a necessary niche but the moderation is killing it!
Sounds like a key indicator that S-O is ripe for displacement...
And as other pointed out earlier, this happens all the time.
As to why it is not constructive: We don't like discussions. Ok, that's a lie, we love discussions, especially heated flamewars, after all we are programmers. However we haven't yet found a good way of moderating and curating such questions on Stack Exchange, we have an array of excellent tools at our disposal, none of which was designed with free flowing open ended discussions in mind.
This is more of a "it's not you, it's us" problem and it's a discussion we seem to be having at least once a week but the bottom line is, open ended free flowing discussions don't work on the platform, and unfortunately we have to close them.
Feel free to bring up any issues you have with Programmers on Meta, especially when it's about closed questions. Sometimes all it takes is a small edit to make the question a bit more focused for it to be re-opened...
- When I linked to it, it had 3,000+ visits. Now, it has 12,406.
- The question had 61 up-votes, and now has 90.
- It was fav-ed by 17 people, now it's fav-ed by 26.
The solution is to divorce your self-worth from outcomes. Instead, derive self-worth from the process. We can have complete control over our actions, but never complete control over our outcomes.
This is far easier said than done.
Potential of success = (Intelligence / arrogance) + luck
The fondness of directing others is really just the enjoyment of not dealing with the minutia of developing a robust solution.
1. Make it work.
2. Make it good (visually or otherwise).
3. Make it fast.
From today's modern perspective, it's laughable. And that was just the first public bit. Surely he iterated some on his own before putting that out.
All of them are new technologies and are changing rapidly and daily, and I find new stuff every day that forces me to change my APIs and the way I do things, and it's getting frustrating... It's the price you pay by using cutting-edge technologies and I accept that, but I can't help thinking that maybe Java+MySQL was a better/easier choice!
The only thing that should be changing often is YOUR code. Everything else should be as stable as possible.
What I find works best is playing leap frog:
* your code is unstable / upgrade nothing
* your code is stable, stop changing it and upgrade things one at a time
test suites / regressions are a must.
I would kill to do something in good old java/mysql.
A lot of the new ideas and principles are a mess. Don't get too absorbed - just use what lets you get the job done quickly and efficiently. a lot of it is just noise.
I tend to find that a complete break from everything for a day helps. That and cider :)
Node being in its infancy is a pretty good reason in itself to not tie yourself to the frameworks which are likewise infantile.
I've got several production back-ends and a full-stack e-commerce site running with Node and MySQL only.
A flawed-but-functional system that ships is empirically better than a perfect system that never ships.
People think that a kanban board is a to-do list, but there's a subtle difference. The real heart of is limiting the number of work-in-progress items. That means that the backlog is less a to-do list and more a things-I-am-definitely-not-doing-now list.
For me, every time I have one of those "It would be nice" thoughts, I write it down on a card for the kanban, throw it in the backlog, and forget it until the next time I make a prioritization pass. Most of the cards end up in what I think of as "the pit of nice ideas", the bottom segment of the board that never moves up because more important things always come up.
For the curious, you can see a photo and a little more explanation here:
My big starter tip is to make the work-in-progress column physically small. My current one limits the "working" and "on hold" columns to 3 items each. Whenever they fill up that's a sign that there's a problem in my process.
Debt is only bad if it's your own long-term debt. One can also use short-term debt as a powerful tool.
For example, it might be simpler for one to write an initial iteration of a program that's badly factored. Then, once you get the program running correctly, refactor it. It's much easier to know you're on the right path if your program runs correctly, and you have verification data-sets or unit tests.
EDIT: Changed one short to long.
A great example of people losing track of the forest because of all the damned trees in the way.
Analysis Paralysis is inevitable as long as you want to write the RIGHT thing.
As soon as you accept "good enough, we'll upgrade later if necessary", you start moving towards the right thing.
Anything that says perfect, adequate, right, correct, etc. is wrong and leads to the dark side.
Not knowing too little. Not knowing too much. Knowing just enough to get the job done.
In computing there will always be multiple solutions, and tradeoffs. What you want to aim for is "The simplest solution possible."
In my experience, this is really hard for most developers.
Maybe the smart thing to do is find someone who makes it look easy and trust their judgment. Again, my experience is that most developers are reluctant to do this.
The question is not how much someone knows, it's whether they know "enough" to get the job done. Goldielocks.