sandal | 10 years ago | on: Kickstarter: Practicing Ruby Contributors Fund
sandal's comments
sandal | 10 years ago | on: The perils of programmer education in the bazaar
1) If you don't think that gender diversity is strongly related to education, why are you participating in a group that's designed specifically to address that problem?
2) Are there not qualified female candidates for running RailsGirls in your area? If not, why do you think that's the case?
sandal | 10 years ago | on: The perils of programmer education in the bazaar
I have been paid to do this for five years with practicingruby.com, without ever relying on commercial support. It's 100% reader funded and reader focused, and it's the largest open-access library of Ruby-related articles you'll find in the world.
> Since money and social "buzz" follow the interest of many people, it seems obvious to me that the educational resources should be focused on those areas instead of periphery areas that few people are interested in.
Everything that is popular and commonplace now was a sparsely populated frontier before. Some folks need to venture into that territory now so that we all benefit from their explorations in the future. It would be nice to keep them well supported, if we want to maximize the benefits we'll reap in the future.
> Other people have said this, but favouring people with good communication skills in the job market is part of a functioning meritocracy.
Helping people with good ideas and a good work ethic is a job we can and should do if we possess the means to do so. The exception may not prove the rule, but I suppose you can say that my communication skills are adequate given that this is my essay we're discussing on the HN front page.
The only way I got to where I am was through support of mentors and colleagues who had helped me in the early 2000s, when free and open source software was predominantly a hobbyist activity and not a commercial activity. There was at that time a real sense of doing things for the common good, rather than just to serve your own interests.
And as I've said before: we rank on the first page at Practicing Ruby for the google search term "infrastructure automation", we're on the first page for "actor model", first page for "Law of Demeter", etc. Several of the contributed articles we've managed to drive so much traffic to are by people who consider themselves intermediate developers, and amateur writers. I've used the money from my paying supporters to: pay contributors for their work, help them edit, revise, and polish their work, and reach a larger audience than they would have on their own. This model does work! It's just hard to sustain because it's so foreign to most people.
I won't even entertain your comments about the lack of diversity, because it reveals your ignorance on the topic, and lack of concern.
sandal | 10 years ago | on: The perils of programmer education in the bazaar
This economic model is so ingrained in our DNA, that we hardly ever question it, and many would go as far as to hold it up as a triumph. But the truth is, even if this system works at the grand scale, it’s hurting both learners and teachers in countless subtle and not-so-subtle ways. Here are just a few:
1) The system we’ve created is assumed to be a meritocracy, but is actually driven far more by popularity and market trends than it is by the quality, relevance, depth, and effectiveness of our learning materials. Although it is far from a zero-sum game, the current model is much more competitive than it is cooperative, and so suffers the consequences that come along with any competitive environment.
2) Because being highly skilled at both writing and software development is rare, those who can do it well are often get the most attention and influence from the software world, turning these folks into “thought leaders” that drive the overall direction of the community.
3) Producing high-quality educational resources is obscenely, ridiculously difficult and time consuming. So the people who can invest the effort are typically either from a position of economic advantage, or are backed by monied interests.
4) As a result, the materials that get produced, and the topics that get covered widely are based on where the money and social buzz is at right now. Those who are doing original research, particularly things that are experimental or exploratory in nature, are not well supported at all.
5) Because we’ve tied blogging and teaching and tweeting to hireability, plenty of people enter into the bazaar not because they particularly want to, but because they must do so in order to “prove their worth” to potential employers or clients. Again, this clearly benefits those who have lots of time and resources to burn, and burdens everyone else with massive amounts of shadow work. We cannot be surprised at the lack of socioeconomic and cultural diversity in light of this point.
6) The success of the few enables the selling of dreams to the many, creating a cottage industry of infomarketers. In effect, these are the folks who sell pickaxes and maps to gold prospectors, and it’s no surprise that their business is booming. Some of these folks are brilliant and insightful, but many are hucksters.
In light of all this, we cannot say “this is just how the internet works”, as true as that statement is now. We have to ask, how do we make things better for our future selves and those who will come after us down this road?
sandal | 10 years ago | on: The perils of programmer education in the bazaar
We do have Wikipedia. It would be nice if there were hundreds of such examples out there.
sandal | 10 years ago | on: The perils of programmer education in the bazaar
However, the main feedback I got from people (and it happened often enough where I'm convinced it was a common line of thinking) was that folks just weren't involved in Ruby anymore, or weren't doing a ton of online reading because got busy with other things. When the average age of our remaining supporter accounts is something like 3-5 years), that's understandable.
I've had two children since Practicing Ruby was started. Things were hard for a while. I wanted to quit the business many times, but left it in a zombie state in the hopes to do right by my subscribers sooner or later.
Now things are getting a little better for me, so that's what I'm going to try and do.
As for eBooks, I've thought about that 100 times. I would love to get some of the existing content into a nicely tied together collection and release it as an eBook. But it's a big enough undertaking where I feel it'd take me away from other more valuable work I could do.
If we get our cashflow situation to be even a little better where I could fund a couple days a month to work on that, I'll go ahead and do it. But for now, I only really can afford to fund about 1.5 days a week of my own work, so that isn't much to spread around.
sandal | 10 years ago | on: The perils of programmer education in the bazaar
sandal | 10 years ago | on: The perils of programmer education in the bazaar
In other words, if I can look at my archives as being a body of materials that mostly holds their value over time, then supporters can be comfortable knowing that their money is stretching far and wide.
Also, although we don't do it as often as I wish we could, I like the idea of periodically going back and revising or replacing old works with updated content, to extend their life even longing and take advantage of new thoughts that come along. Having paid supporters really helps there, because it feels less like a chore and more like a service.
As for perishable / time sensitive content... I don't really know. I guess in that case you're funding people for their time and expertise rather than the lasting value of the work they do. I think this would come with a very different set of challenges, but I'm not seeing where the economic problem would be.
In the first couple years of Practicing Ruby's development, we did release the content only after it had been available to paying subscribers for a while. (There would be 10-20 articles available to subscribers only at any point, with a sharing mechanism that allowed folks to post links for others to jump the paywall)
When we stopped that and moved to directly releasing content when it was ready to be published, there was no major change in subscribers immediately, or even within a six month window after that decision was made. Actually, the cancellation rate went way down, so that might be a sign that the supporters were supportive of the idea.
The problem (and I'm sure some folks here may have guessed it), is that once everything was made available for free right away, the number of new subscriptions went way down. Whereas before we might see 30 new subscriptions a month and lose 20 people, we started seeing 1 new subscription a month and lose 2 people.
A sequence of events that happened since then has slowly bled the business of its revenue, although our traffic improves every week, even without new content being published for several months at a time. The most notable one is that I decided that the business ought to run on its own revenue, something that is ultimately a good thing but was a harsh change because previously I'd work 120+ hours a month on the project and only just barely squeak by on a subsistence level.
So basically, the project went dormant for the better part of a year, and although I did some small things from time to time, I mostly saved up the revenue so that I could pour more dedicated time into things down the line. In that process, we understandably lost supporters over time, but the main issue was bringing in new subscribers.
At this point, I'm burning the modest reserves I stored up, and that's given me a few months of runway before the project needs to go dormant again. If the collaborator model works and the kickstarter I set up gets funded, I think I'll be able to stretch things a lot farther. I do a very intensive process with anyone who contributes their work, but at this point it's still much easier for me to collaborate with someone who's contributing ONE article to Practicing Ruby than it is for me to research and write ten more pages when I've already produced something like 1000 pages of work.
So in a way, the death knell rang, and that's what motivated me to try to fix the business problems. In the process of doing that, I remembered the motivation for doing the project in the first place (which was to provide a functional example of a top-notch free documentation project), and that's what got me excited about things again.
Who knows what will happen from here? Maybe the project will still die. But either way, I'm sure I'll learn a lot from it.
sandal | 10 years ago | on: The perils of programmer education in the bazaar
Related to your last point:
> How about finding ways to compensate those who already produce valuable content in the commons, so they can have more time to do what they already do well?
This is actually what I've been trying to do with my own reader-funded project (http://practicingruby.com). I've been modestly funded for five years now to produce free documentation for Ruby programmers (and really anyone who is interested in software development that can read Ruby).
Occasionally, we've paid contributors to help us publish articles. Right now I'm trying to do a Kickstarter to give us some seed funding to really expand the number of contributors we can work with, and my existing subscription revenue will fund me so that I can assist these folks with editing, research, code cleanup, etc. That helps expand the pool of potential contributors, because folks don't need to be expert programmers or writers, they just need to be working on something interesting and willing to try to share their knowledge and experience with others.
Those who want to support the contributors fund are welcome to do so here: https://www.kickstarter.com/projects/828998531/practicing-ru... -- 100% of this money will go to the authors of the articles, I'm not keeping any for myself.
sandal | 10 years ago | on: The perils of programmer education in the bazaar
> 1. Community is absolutely a weasel word when you're using it to lump together people from many different backgrounds and speak on behalf of them, or to act as if your particular sense of identity is representative of a whole group.
Help me find a better word for what I'm trying to say here: When I say "as a community" I mean, "as people who ought to be concerned about the social impact of our decisions as much as the economics and personal motivations"
> 2. Nothing is bad about a flea market. I just would like to be able to also have public non-commercial spaces for learning, and have them be well funded and supported too. I meant it literally when I say the current model works too well economically, and so there is less incentive to make long-term investments in educational resources that are explicitly for the common good.
> 3. It comes down to economics and social capital. Those who have gained notoriety through luck, connections, or money, tend to have their signal amplified indefinitely.
Yes, if someone really starts being malicious in what they do they will eventually lose their reputation, but it's a slow process and so those who get into that position tend to stay there. This is the nature of a competitive environment, whereas a cooperative environment intentionally makes adjustments to mitigate that effect. It's a little hard to explain because we have so many examples of the former and so few of the latter.
> 4. We agree, and I said that a few times in the article. It wasn't just for rhetorical purposes. I'm saying, if the current model is an improvement and evolution of a worse model that existed in the past, maybe we can still think about a new paradigm shift that is much better than what we have now.
But honestly, I'd be perfectly satisfied with comfortable co-existence between the commercialized education model. Even if 80% of our work was indirectly or directly tied to commercial promotion, it'd be nice if 20% of our resources could exist in the commons.
> 5. Not referring to developer tools here, I'm talking about developer education. There are plenty of "learn to code" things that are not effective, but because they're marketed well, they make plenty of money. In addition of these, there are plenty of "how to make money as a coder" things, etc.
There are also plenty of examples of open source tools that are poorly documented or designed, yet due to their popularity or entrenchment, spawn a business of consultants and educators to teach people commercially to use these things, without contributing the materials back to the commons under free documentation licenses. This is valuable work and shows that our marketplace is semi-efficient, but it's not socially optimal. The socially optimal result is for the information to be released as free documentation.
> In summary:
I guess my thesis missed you, because that's not what I meant to say at all. What I said is, "the world is unequal, and so it will tend to favor a tiny minority of privileged folks unless we actively seek to balance things".
For my own part, I've spent the last five years creating what may be the largest collection of open source learning materials for Ruby programmers in the world (find it at practicingruby.com). If you google "infrastructure automation", one of our articles is the top hit. If you google "actor model", one of our articles is on the front page. Neither of these articles were written by people with sizable followings or influence on the internet.
I paid these folks for their work, helped them shape and edit their content, and gave them access to a much larger audience than what they would have reached on their own. My own name does not appear on their work, nor does anything promoting some third party product or service.
People do pay for Practicing Ruby. Not commercial sponsors, but readers and community supporters. It'd be nice to see a few dozen similar publications on various topics, and for the model and motivation to be well understood and supported.
The problem I have is that this kind of thinking about publishing is something people never even give a passing thought... so as someone trying to do something different, I am constantly fighting an uphill battle.
I don't want to overstate my own role in making a difference here... I view my own project as a baby step, one of many necessary to make the kind of changes I'd like to see in the world. But at least I'm trying to stand up for my principles by putting the ideas into practice.
sandal | 10 years ago | on: The perils of programmer education in the bazaar
sandal | 11 years ago | on: Parsing: The Solved Problem That Isn't (2011)
https://practicingruby.com/articles/parsing-json-the-hard-wa...
sandal | 11 years ago | on: Simulating the emergent behavior of ant colonies
sandal | 11 years ago | on: Simulating the emergent behavior of ant colonies
The Ruby-based simulator discussed in this article used Rich Hickey's Clojure ant simulator as a starting point: https://gist.github.com/spacemanaki/1093917
Hickey's simulator was perhaps a bit closer to what you are looking for. It only emits one type of pheremone, which it releases on a continuous basis.
In my simulation, I introduced two types of pheremones: one emitted when food was found, and another emitted when the home was found. In retrospect, I possibly could have continuously emitted the "food" pheremone when traveling outbound, and the "home" pheremone when traveling inbound. I can't remember if I tried that and ran into trouble, or just didn't think of the idea at the time I was building this.
I vaguely remember choosing to implement things this way because it eliminated the noise generated by ants wandering in circles endlessly, but I honestly can't remember why I decided to "improve upon" Hickey's simulator.
It's worth pointing out that though the behavior of the world is very artificial (the whole trail gets marked at once after a complete path is run), the behavior of the ants themselves still only relies on their immediate location. And because these ants don't know where "home" is, they're even dumber than real ants that actually do have some sense of direction.
Anyway, refinements on this simulator or links to other simulations that illustrate these ideas are absolutely welcome! I'd definitely update the article if we found a way to improve upon what I've done.
sandal | 11 years ago | on: Simulating the emergent behavior of ant colonies
sandal | 11 years ago | on: Ask HN: What do you use for PDF reports these days?
We are working on a long term solution to that problem by finally focusing on building an extension and components layer for Prawn, which would hopefully allow all sorts of other gems to fill in these gaps. But it's a ways off into the future.
If going to Asciidoc is an option, Asciidoctor is now Prawn based for PDF output, and might make sense for simple reports:
sandal | 11 years ago | on: Infrastructure automation by example
Thanks for the feedback, I've emailed Mathias to let him know about your suggestions.
Bug reports, suggestions for improvements, and pull requests related to the cookbook can also be filed directly here: https://github.com/elm-city-craftworks/practicing-ruby-cookb...
Since we've been seeing a lot of traffic from this article, I'd be happy to also answer questions here that HN folks might have about how Practicing Ruby works!
sandal | 12 years ago | on: TDD, Straw Men, and Rhetoric
Gary makes this claim:
> You finally get to see what's really going on. David's tests run in a few minutes, and he's fine with that.
> I'm not fine with that. A lot of other people are not fine with that.
But what DHH actually said is this:
> You might think, well, that's pretty fast for a whole suite, but I still wouldn't want to wait 80 seconds every time I make a single change to my model, and want to test that. Of course not! Why on earth would you run your entire test harness for every single line change in a particular model? If you have so little confidence in the locality of your changes, the tests are indeed telling you that the system has overly high coupling.
and this:
> These days I can run the entire test suite for our Person model — 52 cases, 111 assertions — in just under 4 seconds from start to finish. Plenty fast enough for a great feedback cycle!
Using a workflow like Gary's, there's an argument to be made that 4 seconds is not acceptable, and this is why we want single files that can run in a few milliseconds.
However, that's not the only possible way of running tests, and the difference between 4 seconds and 300ms for the feedback you're actually interested is massively different than 300ms vs "a few minutes".
For a post that calls DHH out on a strawman, this is in itself a great example of one.
sandal | 12 years ago | on: Big changes to Erlang
sandal | 12 years ago | on: Practicing Ruby journal moves to open-access, 68 free articles already available
If you have any questions, I'd be happy to answer them!
I run practicingruby.com and am the one who set up this Kickstarter. All the money is going to contributors, and the materials will all be released under CC BY-SA as soon as they're published. In addition to a $500 honorarium, I will set aside five days for each collaboration to help w. anything that's needed... whether it be editing drafts, turning raw notes into an article format, researching, seeking technical reviewers, etc.
Happy to answer any questions anyone has, or respond to feedback.
We are funded already w. 8 days to go, and because Practicing Ruby does have some recurring revenue from monthly subscribers who support the project, we've already broken ground on commissioning contributed works. That means we should publish something new within the next few weeks.