Ask YCNews: Any lady hackers using the site? - <AUTHOR> I just realized that I assume all of the users here are guys.  I sure hope I'm wrong.  Any ladies want to speak up?  While girls are few in number in CS, they usually have valuable insights. <comment><USER2> Hi there. I use the site pretty religiously. I _hope_ that my comments are insightful.

I know a few girl hackers. They do mention a lot of what might be called 'social friction'. In some cases, they stay around through undergrad because computers are a really magical, flexible medium.

The good news is that we _like_ a lot of hackers and scientists and technical people. They're _interesting_. Other fields have their human debris, too. Lawyers have frat-boys. Lit-majors have bullshitters. But rarely do other fields have people getting together to make things, and that's just a lot of fun. :-)

<comment><USER3> I have a lot of respect for women who like the idea of building novel applications but don't want to get their hands dirty with the programming/computer science involved.

This is kind of like architects who want to design buildings but would rather leave implementation details to engineers.

That's the way it should be.

<comment><USER2> Well, that's the way it often is. But I hesitate to agree that it's the way it should be. I try not to shy away from implementation myself, and I think there's a lot of benefit to exposing oneself to details.

To quote PG: "In principle you could make any mark in any medium; in practice the medium steers you. And if you're no longer doing the work yourself, you stop learning from this."

I speak for myself, but this true almost everywhere. Small changes in the resistance of medium, and in the convenience of doing one thing or another, often lead to drastic differences in the sort of things people create.

I heard that someone actually managed to play 'Flight of the Bumblebee' on Trombone. I'm not sure I can impress upon you how difficult that sounds -- there are like 5 notes per second, each requiring precise intonation, and it never lets up long enough for the poor soul playing it to breath. Apparently, it can be done. But I'm almost certain nothing of the sort would have been composed on it.

Programs are often the same way. Sometimes, the idea doesn't occur to you until you understand how to implement it. Or, as the case may be, until you actually implement it. I read that Scheme was in part an attempt to implement an Actor model. When they implemented lexical closures and actors, they discovered that the implementations were the same!

<comment><USER3> If the medium steers you, then that's not a good thing and you need to fix the situation.

For example, if writing by pen tends to force you to write a novel in a particular way that is undesirable, then fix the situation (e.g., use a word processor).

As a creative individual, you should be the one calling the shots.

<comment><USER2> Sometimes, while 'creating', it's less like trying to cast my visions onto some medium and more like an exploration. Sometimes it's more fruitful just to let myself be guided by my impulses, my abilities, and the medium. I don't know if it works for everyone, but it works for me. One might worry that I'm being commanded by the medium, but what I make seems to be original, anyway.

I actually prefer writing by pen. It's more fluid. And since things can't be easily rewritten, you give a bit of thought before you commit something, and are always driven forward.

Knuth et al. notes, in an article on technical writing (<http://tex.loria.fr/typographie/mathwriting.pdf>):

"Towards the end of the editing process you will need to ensure that you don't have a page break in the middle of a displayed formula. Often you'll simply have to think up something else to say to fill up the page, thus pushing the displayed formula entirely onto the next page. Try to think of this as a stimulus to research!"

A pen sometimes functions in the same way. And if I find it's results undesirable, then I'll try not to think of it as a problem to fix, and rather as looking for a new medium to explore.

<comment><USER3> While limitations of the medium may help _you_ be more creative, it doesn't mean that the same holds for _me_ or most other people for that matter.

If, for example, you can find a scientific study that demonstrates that people are more creative with a pen than a word processor, then I would be interested.

For me, one should strive for ideas that transcend the particulars of existing mediums. Such ideas are more likely to be influential in the long term.

</comment></comment></comment></comment></comment></comment><comment><USER4> I recently had an intriguing conversation with a female friend who is starting a CS program, after spending years in another field.

She's about as used to "geek culture" as a person can get, but even she finds the people in CS to be overwhelming. Her take? CS departments need to focus a bit less effort on _attracting_ women (a task which fundamentally defines them as different), and a bit more effort on _repelling_ socially retarded men (who really _are_ different). I can't say that I disagree. CS is the last refuge for some really damaged people; I get sick of it too.

IMO, CS101 should be a mandatory class on hygiene and social skills for people who already know how to program.

<comment><USER3> So instead of having highly rewarding and productive computing careers, these socially retarded men should do what instead? Become criminals perhaps?

<comment><USER4> I don't accept your premise. Very few people have highly rewarding and productive careers when they are socially retarded. Inversely, a little social etiquette never hurt anyone.

The culture of computer science is currently unique, in that it gives the seed of antisocial behavior a fertile place to take root. That _doesn't_ mean that antisocial behavior should be encouraged or accepted.

<comment><USER3> Maybe there's a good reason why so many computer programmers are antisocial. Maybe it takes an antisocial person to devote the enormous amounts of time and effort required to write non-trivial programs.

Also, computer technology may make most people anti-social. Consider for example flamewars that would never take place off-line.

<comment><USER4> I don't know if I buy that, either...is jwz anti-social? pmarca? pg? Joel (of on-software fame)?

My personal experience has been that the best programmers have a large personality overlap with the best visual artists and musicians. That's not necessarily well-adjusted (crazy intensity and burnout often go along for the ride), but it's not anti-social either...certainly, you can't very well argue that artistic careers are unappealing to women!

In any case, my gut instinct is that computer programmers tend to be anti- social, because anti-social people are _drawn_ to careers that involve minimal human interaction. The computer gives anti-social tendencies room to grow, but I don't think it causes the problem.

<comment><USER5> You're retarded if you don't think that programming is one of the most anti- social activities in existence. You only know of those people you list because they are successful writers. That has absolutely nothing with how good they are at programming.

Further, if you think that schools have an substantial share of the blame for women getting into programming, then your misunderstanding of the topic is even greater.

<comment><USER4> Thanks for providing a great example of what we're talking about, Steve.

<comment><USER5> thanks and I'm not steve.

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER6> Where I work there are like 25 guys and only one girl(She is super smart and pretty). We have been trying to hire girls but we can't find any. For some reason they don't want to be programmers. That is very unfortunate.

<comment><USER7> I feel badly for her, for you just mentioned her attractiveness when it has no relevance. Perhaps when we (being the male gender we) start considering females' intelligence as the _only_ factor and not half of the equation things will change.

Out of the 26 coworkers, you mentioned the physical attributes of the one female.

Sorry to pick on your one quick post, but it is just very representative of our society's lingering gender gap.

<comment><USER8> I think it has some relevance, because it shows that being in IT does not imply unattractiveness. Talk about unattractiveness of male geeks is quite common, too.

Also, I think it would be nonsense to deny our human attributes. Men are interested in women's looks, and vice versa. Actually, isn't it another complaint of successful women that to be successful, they had to become like men (a ka Margaret Thatcher)? So if a successful women is still attractive, it might be a good role model after all.

<comment><USER9> It isn't "human" it is "cultural". Still shouldn't deny it, but it can and will change. (And has changed a lot already!)

<comment><USER8> So you mean in other cultures looks don't matter? Maybe if the parents set up the marriages? Do you have any references?

<comment><USER9> I don't mean other _existing_ cultures are different. (Although, there are differences.)

I mean it is a matter of culture (ideas) not "humanity" (DNA).

There are many reasons to believe this. Two are:

\- memes evolve orders of magnitude faster than genes, so once they existed, they responded to almost all selection pressures first. anything with complex social interactions that require intelligence couldn't have evolved before memes (ie, before we had intelligence).

\- people sometimes make changes to how they treat women, how they interpret appearances, to all sorts of related ways of thinking and behaviors. this points to culture because our ideas are designed to be changeable at runtime, and our DNA isn't.

<comment><USER8> Sexual attraction seems kind of important to the survival of humans, though. Or at least it used to be (cloning and stuff like that might change that).

Of course there are cultural aspects to how women are being treated. Granted, there could be cultures where people would not automatically remark on the attractiveness of a female colleague. For example, if all women are hidden behind veils, and infidelity can get you killed, maybe people are much more careful about what they say (just guessing, I don't know).

<comment><USER9> Before intelligence, there was no such thing as 'sexual attraction' in the current sense. There was only the exact same thing animals have: programs that behave in certain ways, based on certain inputs. Like a DARPA car steers left on certain input, an animal has sex on certain input.

With the advent of intelligence, came the ability for high-level interpretation of sense input -- we might say that events took on meaning. From a survival point of view, the ability to reinterpret arousal chemicals, and other things, was no serious danger: any culture that did that would die out. (And even if it was dangerous for the species, evolution doesn't do advanced planning of that sort.)

What we have today, and call sexual attraction, involves many layers of intelligent interpretation, which we (largely unintentionally) teach to the next generation -- ie, it is culture. If parents behaved differently, the meaning of sexual attraction would change.

Edit: By analogy, DNA = assembly language. We program in higher level languages. (Imagine programming in 500 years though, so it's much further removed from assembly). At some level of abstraction, the original details of DNA/assembly are totally irrelevant to the level we normally think in.

<comment><USER8> I remain skeptic. Sure, there are cultural signals we learn to interpret (short dresses, suits, marriage rings,...), but on a basic level, for the most part, women will be attracted to men and vice versa? Diseases will be repellent, as will other attributes of unfitness? You think you can raise men to be gay? (I don't know). Surely there is a lot of research on that, but the final word is perhaps not out yet?

<comment><USER9> People _do_ raise men to be gay. Happens all the time. A few percent of parents do it (I don't know any reliable statistics). Not on purpose, sure, but parents don't raise straight kids on purpose either. (Yes, people try to "make their kid straight" occasionally, but there's no evidence the things they do actually have the intended effect.)

I definitely think one day we will learn how to analyze what parents do that causes men to turn out gay, and be able to copy it (or not).

However, I won't be surprised if the answer is: all present-day parents enact parenting strategies capable of causing homosexuality, but they only behave to cause it (unintentionally) when triggered in the right way (i.e., by some characteristic of young children other than homosexuality itself).

</comment></comment></comment></comment></comment></comment></comment></comment></comment></comment><comment><USER10> Speaking as a member of the homogametic sex, I've been lurking on news.ycomb for a few months now. About the time I was considering speaking up on an algorithms topic, this appeared as a leading link: <http://news.ycombinator.com/item?id=99255>. The comments included such insights as "where can I get me some of that" and "those chicks aren't hot enough for the likes of me."

Now the use of "lady hackers" has raised my hackles as well. (See the American Heritage Book of English Usage for a deft explanation of why: <http://www.bartleby.com/64/C005/021.html>.)

I keep lurking because the community here is small enough to wash up a few pointers I wouldn't otherwise find. But, gentlemen, I take my insights where they're welcome.

<comment><USER11> As someone who never studied much biology, I must thank you for adding the word "homogametic" to my vocabulary.

</comment></comment><comment><USER12> Does it really matter? (See if you can infer my gender from this question alone.)

There are 5 females in my company's R&D, comparing to about 30 males. That was way better than at my previous employer, where I was the only female in the 25-person team.

<comment><USER13> I'd say it does. Maybe not specifically to yc, but overall for the industry. Not that the prevalence of women is directly proportional to a given field's success, but it's like money: having more than someone else doesn't mean you're better, but if you don't have any at all, you're probably fucking up somewhere.

<comment><USER8> It would definitely be more motivating to go to work every day if there were some female colleagues.

</comment></comment></comment><comment><USER14> I'm yet another one, though I don't spend much time on yc; I spend more time on reddit and slashdot (not under this name), and actual coding.

</comment><comment> daniel-cussen This subject is a huge can of worms.

On the one hand you'll have members of a largely-male audience say that there should be more women in CS and that the industry is extremely sexist. They'll say women are wonderful.

Then you have the people who agree and say women are great and sexually attractive.

You have the people who complains at this objectification and say that it's people like these that are responsible for gross gender inequalities.

Then you have the people who point at IQ research.

Then you have people that question the validity and conclusions of the research.

You then have extreme self-righteousness. Then there's blatant sexism.

Then someone mentions Carla Fiorina as a good example, but someone says she didn't deserve her success.

You get people trying really hard to put a finger on why they think men are better hackers without sounding like bigots. They can lie on either sides of the spectrum of intellectual honesty. When scientific studies are mentioned, they can be rationalizations of bigotry or attempts at honesty and open- mindedness.

I hope I didn't overrepresent the point of view of any of the many sides of the argument. I've looked over this post and alternated the order of the points of view in the sentences and paragraphs above. However, I feel really weird about this discussion. I suspect that no matter how hard I try to talk about these issues without taking a stand with regard to politically incorrect subjects, I'm going to look like an asshole if I don't ultimately rule in favor of the politically correct viewpoint. But if you go so far as lying about your viewpoints in order to look politically correct, you're a bullshitter, and no less of a bigot. On the other hand, being too concerned about the dangers of political correctness might actually make me more prejudiced. What worries me is that there might not even be a safe zone between being a bullshitter and being a bigot. It might be impossible to add to this topic without being either a bullshitter, a bigot, or a little of both. But then, every person with an opinion on the subject would be an asshole in some shape or form, and that doesn't seem reasonable. There should be a safe zone. Of course, if you believed every politically correct statement, and you expressed those views, you'd be fine. But how common is this? Who can say they're totally unbiased? Should we only let he (or she) who is without sin cast the first stone? If we did things this way, though, guilty parties would avoid getting a stoning they may deserve.

It's a can of worms. There's not a lot you can say without someone going ad hominem on you.

It is not a bad idea to put this kind of question on Hacker News; it is supposed to be an open forum about what things interesting to hackers. But because it is an open forum, try not to wantonly go around chastising other posters.

As a reader, you should know what you're in for when you choose to read this link. People can say whatever they want, and they will. Sometimes they'll be too politically correct, sometimes they won't be politically correct enough. On top of that, there's the bullshit from both sides. You might end up reading something you'll find personally hurtful. But then, this is a forum. People have been asked not to be mean, and for the most part they'll try not to be. But if you don't want to risk being hurt, don't go into the forum.

I didn't write this very well. I apologize. I wound up being pedantic, too. And I said some things that might cost me. But I can't keep rewriting this and make semantic barricades that I can later hide behind. I can't censor myself based on what future employers and people like that might think when they google me.

<comment><USER15> Kudos for trying hard to be even handed with a "you can't talk about it" subject. Difficult even on hacker news.

<comment><USER9> people are talking about it. there are much more difficult subjects.

<comment><USER15> Let's hear them!

<comment><USER9> if i try to give you an example, one of two things will happen:

\- i will seriously offend you

\- i won't seriously offend you

so either you'll hate me, or think i'm wrong. i don't see how i can win.

<comment><USER15> I don't think I "offend." I seriously can't think of anything that offends me. I might consider you immoral though, say if you thought genocide was a good idea or something. But, I'd do this on principled grounds and explain why.

However, many people's profiles are linked to their real selves, so this isn't a non taboo area for them.

<comment><USER9> An interesting issue is that what you can or cannot say, depends a lot on how you say it. If you talk in a way that is easy for people to ignore, you can get away with almost anything -- people just won't pay enough attention to understand what you meant.

At the other extreme, if you take ideas that are currently say 90% accepted, and you talk about them in such a way that the other 10% feel strongly pressured to change their minds, you can seriously offend them. You can generate resentment, by saying there is no reasonable middle ground, and the wrong view is wrong, and elaborating in detail on how bad it is, and why it's so bad, and how they are hurting their friends and family and themselves by not changing their mind, etc... Even if all that is true, and even if there do not exist any half-decent arguments for the 10%-and-declining view.

You can even offend people who agree with you, but who think you're putting it too strongly, or something. Even if they have no rational reasons for saying your claims are too strong. They may not even consider it a matter of truth, but instead a matter of being nice, or something. Most people think that way, some of the time.

What you are actually talking about matters too. On some subjects, it is easier to trigger defensiveness, on others, harder. So there are some "least possible to say" things, and they are a lot worse than discussing sexism.

PS I think you may have a typo with that double negative isn't + non.

</comment></comment></comment></comment></comment></comment></comment><comment> daniel-cussen Not that I know of. I think there's a lot of stigma on both sides. There may be stigma against women in chat rooms like this one, and women may have a stigma against becoming hackers. These are just hypotheses, of course, and by no means do they apply to all hackers or all women. They're just general trends I've heard cited. That being said, the ratio of girl haxxors to guy haxxors in my dorm seems to be getting better. It's like 1:4 where it used to be 1:7. Another problem is that hacking is not very glamorous.

<comment><USER13> It's definitely a bit of a mental block. A lot of girls who would love to be able to do things requiring hacking skills, but they don't want to actually have to learn the foundational stuff, i.e, Data Structures/systems programming. They want to be able to jump from the intro-level courses straight to bioinformatics or graphics/multimedia courses, not because they think it's too hard, but because they almost feel like it's going to do something to them as a person.

"Yesterday, I gave a talk to our new cohort of Computational Media undergraduates about the CS classes that they will be taking. One student asked me about 3-D modeling, and I told him about our computer graphics classes. Then a young lady asked me a question that bowled me over, "If we don't take computer graphics and we get a Computational Media degree, is all that we can do is become programmers?" The last word just dripped with disdain, as if that was a mid-level in Dante's vision of hell." --Mark Guzdial

<comment><USER16> > The last word just dripped with disdain, as if that was a mid-level in > Dante's vision of hell.

That's dead-on. It is _exactly that_.

</comment></comment></comment><comment><USER17> Donna, <http://news.ycombinator.com/user?id=donna>

but she disappeared several months ago :) I assume she changed her nickname not to be abused by nice looking hackers using this site. I think the problem is that PG doesn't allow us to publish our photos, so your question could be inspiring for him :) YC.news => Hacker.news => YC.Hacker.Dating.news

<comment><USER18> Why talking about women needs to bring along dating? No wonder women hide away.

<comment><USER5> I believe the answer lies somewhere in our DNA. Please direct your complaints to Mr. Darwin.

<comment><USER19> Hey, don't shoot the messenger.

<comment><USER20> Why not ? that's totally counterproductive, but so distressing :)

</comment></comment></comment></comment></comment><comment><USER15> What is it about geeks that turns women off? Is it merely the social maladjustment?

We males tend to adjust our behaviors based on what women find sexy, which is partially why universities used to be male only. Geekiness correlates with good intellectual work, but as mentioned, women don't like it.

Which also makes me think that the key to guiding society is by defining what women find sexy.

<comment><USER21> I like geeks. I'm not a very good geek myself, but I can mostly follow the technical discussions, with lots of Googling.

I can't speak for other women, but I hate it when people exhibit a lack of social skills, and it especially infuriates me when they're not funny or overly shy.

Aside from confidence, health, social skills, and ability to entertain and amuse, I think the only thing society can define about male sexiness is the prestige of his financial prospects. Perhaps some other woman will have more input.

<comment><USER15> I'd say the definition of sexiness has changed. Now "sexy" is dashing, promiscuous, childmen. The qualities essential for good families are not considered very sexy, whereas they used to be moreso.

</comment></comment></comment><comment><USER22> OMG a woman on the internet. Pix plzzz!!!

<comment><USER23> Unfortunately, repeating an ill meme, particularly in a way that seems as if you are falling into the trap isn't particularly ironic or clever, it's just socially awkward.

I understand what you're going for, but it doesn't accomplish your goal, and it just continues a stereotype rather than working to create an environment that's conducive for discussion.

<comment><USER22> I understand that, and I normally am not the kind of person to say such things, but I thought it was rather meta-ironic, considering the xkcd comic...

edit: unless, of course, you were trying to be meta-ironic too...

<comment><USER14> The problem is, these ironies and meta-ironies are just as old, trite, tiring, and grating as the same thing meant seriously. Believe me, meta-irony on this topic has been done before, many times, and not only based on the irony of an xkcd comic.

It might be the first time you do this, and you think it's funny, clever, and 'meta-ironic' (oooh). I suppose it's somewhat like lists of jokes that people forward around: funny the first few times, and "I'm going to auto-killfile this" after a few years of hearing the same ones.

</comment></comment></comment></comment><comment><USER18> Should tell you a lot about the kind of incorrect attention that women get in this site (and anywhere else in the internet, including chat rooms) the fact that nearly no women get an obvious female nickname.

Just imagine what would happen if you create a user whose name was "Laura". Try it.</comment>


Programming FAQ - <AUTHOR> http://www.paulgraham.com/pfaq.html <comment><USER2> If someone never programmed before, and had little concept of programming fundamentals, then I would highly recommend starting with my favourite simple language: Logo.

The thing about logo is that it was specifically designed as an educational language. It teaches the basics of syntax, commands, variables, and functions, and it offers instant gratification. It is very easy to see how a computer can follow very simple programs, and if you do something wrong you see it immediately. Once they've mastered the fundamentals of logo (which should only take a couple hours) then I would have them move on to a full blown language.

<comment><USER3> I haven't programmed in Logo in years, but I recall it as pretty full-blown: isn't it a dialect of Lisp (with a funny infix syntax but) including macros?

<comment><USER2> Yes it is, but as far as I know its not widely used outside of the turtle programs. In my opinion, instead of delving deeper into it, the student would probably benefit a bit more in the longrun by spending the bulk of their time on something more mainstream...this would open them to a much more available set of documentation, support, communities, etc. Though maybe I am wrong and there is a thriving massive Logo development community!

</comment></comment></comment><comment><USER4> I find the RAQ more interesting - <http://www.paulgraham.com/raq.html>

<comment><USER5> Has pg ever exhibited a painting?

<http://www.idlewords.com/2005/04/dabblers_and_blowhards.htm>

<comment><USER6> Wait no, I lie, it's still out there in the tubes

[http://1.bp.blogspot.com/_KKByGBh0xRM/S0FD11qiIXI/AAAAAAAAA1...](http://1.bp.blogspot.com/_KKByGBh0xRM/S0FD11qiIXI/AAAAAAAAA1s/y9BnykUj_Dg/s320/paulgraham_2056_13101059.jpg)

</comment></comment></comment><comment><USER7> >But if I were trying to solve the problem one reader sent to me as a canonical example of an OO problem, I wouldn't. Suppose you have n serial ports, each of which may speak one of k protocols, and this must be configurable at run-time. I'd just use an n-by-k array of closures to represent this.

Can anyone enlighten me about this? My first thought is that n+k units of code is less than n*k, but I expect it's more subtle than that :-)

What about code reuse? In OO land, it's fairly obvious to me that I could take any number of my protocols and use them across a TCP/IP connection, or carrier pigeon, or a file, but I can't see how the closure example would allow this sort of sharing. Is that the point? Only code what's necessary?

<comment><USER8> I suspect the n-by-k array part is a typo, an one-dimensional array of closures is all you need. I also don't think the closure approach is bad for code reuse. The closures serve just to bind the environment to the TCP-handler and UDP-handler functions. The closures themselves are probably trivial and not worth sharing, and the protocol handler functions (or closures) can be shared like any other library function.

<comment><USER6> Where are you (and the OP) getting TCP and UDP from?

<comment><USER7> My point was that the protocols could in theory be used across connections other than serial ports.

</comment></comment></comment></comment><comment><USER9> Using vi to edit lisp is an interesting choice - I've got the vi commands hardwired in my brain now after using them for 20+ years and I've written a lot of Lisp but I don't think I've ever written any Lisp in vi.

<comment><USER10> I used vim for lisp for some time. That worked fine actually.

Of course I didn't do things like emacs-slime, so, I always have a repl open in a separate window. ':set lisp' along with 'set lispwords=...' worked fine.

<comment><USER11> I wrote a small improvement on the default lisp indentation: <http://www.vim.org/scripts/script.php?script_id=2951>

Vim users are yet to have a full Slime replacement, but Nekthuth is quite nice.

</comment></comment></comment><comment><USER12> If you have never programmed before, I'd recommend you to start with html, then css, then javascript, then javascript on the server, then sql, then stop. Go back to the beginning and master every one of them.

Then in your spare time learn lisp.

The formers will give you money; the latter, enlightenment.

<comment><USER13> Forgive me if I'm reading this wrong but it seems to assume someone is trying to learn how to program for _the web_.

...if you were interested in programming embedded microcontrollers for robots, html and css isn't going to get you too far and I think learning Javascript as your first "programming" language would do more harm than good...

<comment><USER12> Wait, is there any other programming besides web programming?

For 20 years I've been coding for mainframes, minis and desktops. No more, for the last ten years it all has been the web and solely the web. And I hope it stays like that.

Regarding embedded programming, yeah you're right, but that's a totally different ballgame and I know most of the readers are interested in web stuff.

About old-fart c++ desktop programmers, poor guys, whether they adapt or join the cobol programmers of last century.

Or at least try Go, the language, to keep the fun alive.

<comment><USER13> _"Wait, is there any other programming besides web programming?"_

In the last year I've been asked about iPhone programming more than web, seriously.

</comment></comment></comment></comment><comment><USER14> _As you learn the mechanics of writing and running a program, start thinking about specific programs you want to write._

This is what I never managed. I picked up programming very fast at school, but could never come up with anything I'd want to use it for. Now that I finally have a few concepts I want to see done (good UIs to promising algorithms), I no longer have the time to pursue them.

That's part of why I believe kids now should start with html+js+css and be introduced to greasemonkey, stylish, and browser extensions. Maybe Node.js, too. Everyone uses some site a lot, and they will find problems in those sites to attack with their new knowledge.

</comment><comment><USER15> It keeps hitting me as a contradiction these two suggestions, namely: a) that you have to understand design to be a good hacker; and b) that planning is overrated.

How can you get to a good design without some plan? Could someone shed some light?

<comment><USER16> Design doesn't have to be planned in advance, hence no contradiction. :)

If you are disciplined enough (and you should be), design can effectively happen as you go.

</comment></comment><comment><USER17> > _you have to understand design to be a good hacker_

If PG means graphical design, I don't think this is true. Looking at the list of hackers in Coders At Work (as a random sample of respected programmers), it is not clear if any of them understands graphical design and they typically have ugly homepages.

(Jamie Zawinski, Brad Fitzpatrick, Douglas Crockford, Brendan Eich, Joshua Bloch, Joe Armstrong, Simon Peyton Jones, Peter Norvig, Guy Steele, Dan Ingalls, L Peter Deutsch, Ken Thompson, Fran Allen, Bernie Cosell, Donald Knuth)

<comment><USER18> I doubt he means graphic design.

<comment><USER17> Design in an abstract sense that encompasses both visual and systems design probably includes designing programs (coding) as well. So it doesn't say much.

</comment></comment></comment><comment><USER19> Sorry, but I couldn't resist, I'm pretending that someone asked me those questions...

Programming FAQ by edw519

What editor do you use?

Textpad.

How can I learn to program?

Find a customer with unreasonable deadlines. Hit them. Repeat. It won't be pretty, but you'll be the kind of programmer I'd go into battle with: great at the things that really matter and mediocre at the things that don't.

Why do you advise plunging right into a programming project instead of carefully planning it first?

It's incredibly difficult for anyone to define what they want when they start with nothing. It's human nature (incredibly easy) to criticize what you have and how to make it better. Plunging right in and producing anything raises you from LevelIncrediblyDifficlut to LevelHumanNature.

Why do you keep going on about PICK?

I have a very small back pocket that holds everything you need to program in PICK. Whatever you can do in technology <x>, I can probably do in PICK, often quicker and easier.

Isn't object-oriented programming naturally suited to some problems?

Sure, but that doesn't necessarily mean you have to use formal object-oriented technology. You can mimic the concepts with almost any technology.

<comment><USER20> OK, I'll ask. What is PICK? I have never heard of it and the only Wikipedia reference is for a railline.

<comment><USER21> <http://en.wikipedia.org/wiki/Pick_operating_system>. I have no experience or opinion on this system; however, I'm fairly certain I first heard of it on TheDailyWTF.

I'd be interested in people's experiences with it, though.

<comment><USER22> My dad used it a lot when I was growing up. He raved about it always and to this day thinks it's the best system he ever used.

</comment></comment></comment></comment><comment><USER23> I wonder what pg thinks about Haskell vis-a-vis Lisp and his own Arc.

<comment><USER24> _Haskell, for example, seems to me a language that's designed more to write papers about than to hack in. I get the impression that using it would feel like reading a novel written by a literary critic._

<http://lambda-the-ultimate.org/node/186#comment-1351>

Borges was a literary critic. He didn't do novels, but his short works are mind-stretching.

<comment><USER25> borges was borges. a programming language suitable for a lone genius isn't that useful.

<comment><USER26> it's useful for the genius!

</comment></comment></comment></comment><comment><USER27> I stopped at the first answer. Half ironic :)</comment>


Pocket Cash Register - <AUTHOR> https://play.google.com/store/apps/details?id=appinventor.ai_computersmauritius.cashregister <comment><AUTHOR> Enter an amount on your smartphone on the fly – and catch it later in Excel in your mail!</comment>


How to stop functional programming - <AUTHOR> https://brianmckenna.org/blog/howtostopfp <comment><USER2> My methodology for avoiding this confusing "functional" programming:

1\. Write:

      function add (a, b) { return a + b; }

2\. Refactor to object:

      class AccumulatingIntegerWidget {
        constructor (...numbers) {
          this.accumulation = 0;
          this.accumulate(...numbers);
        }
        accumulate (...numbers) {
          for (const n of numbers) {
            this.accumulation = this.accumulation + n;
          }
        }
        getAccumulation () {
          return this.accumulation;
        }
      }

Presto! It's stateful and object-oriented and handles future cases like adding three numbers, even though WeArentGonnaNeedIt!

If this does not satisfy, I progress to making my classes observe each other and update themselves automatically. "We're doing two-way binding!" I exclaim proudly, while leaving debugging as an exercise for my colleagues.

<comment><USER3> This is one reason I hate our industry. No one engineers anything. They all just abuse OOP so that code is packaged together in some arbitrary heirarchy and then refactor it every single time a user story is added.

<comment><USER4> If we forced everyone to switch to Haskell, do you think this would really be any different? People would still do the bare minimum to implement the latest user stories, because that is literally what the boss is paying for.

<comment><USER5> We force everyone to switch to Haskell. OK. Even the fair-to-mediocre programmers? Yes. Who tend to program by copypasta and change stuff until it gets the right answer? Yes.

Run away. Run far, far away. You don't want to see what "design patterns" and urban legends these people layer on top of Haskell to make it intellectually manageable.

<comment><USER6> I remember being a sophmore in college and I understood the basics of haskell (not really monads yet) and we worked in groups. My partner was very intelligent, but didn't have a grasp on the language at all.

For the final project, we had a problem that I didn't understand well, but he couldn't use the language effectively. We ended up having him work out the problem incorrectly in a shared notepad and I would refactor his broken code into something that worked. It was a mess. I'm pretty sure I've seen worst things you can possibly build in haskell -- and they are bad.

</comment></comment></comment></comment></comment><comment><USER7> I've had some success explaining, mainly through pair programming, code reviews and an educational use of the console, the basics of FP-ish constructs such as map, fold, filter, pattern matching, control of side-effects, etc.

It's amazing what you can do if, instead of assuming an arrogant attitude, you take your time to teach other programmers and review their code to explain how to avoid pitfalls, and accept that some people will remain unconvinced about some aspects of FP that you cannot adequately justify (a good reason to seek a better understanding of those justifications!). And it has the added benefit that this situation will never reach your manager, so he/she doesn't have to get involved :)

<comment><USER8> > such as map, fold, filter, pattern matching, control of side-effects, etc.

 _map_ and _filter_ have become natural parts of my thinking, _fold_ too is getting there, and avoidance of side-effects even gives pleasant tingles to the math-guy in me, but I've never understood what pattern matching brings to the table. In my admitted limited understanding, they seem to be a syntactic sugar for _if-elseif_ branching that ends up scattering the logic of a function to multiple blocks of code, while bringing no obvious benefit compared to them.

Since you mentioned your success explaining the justifications for these things, I thought I'd take advantage of that here. :) Could you explain what I'm missing with pattern matching?

<comment><USER9> Pattern matching is not just sugar for an if-elseif chain, since compilers will check for exhaustiveness. This is especially important when used with sum types (which are the primary motivator for this feature):

        data Thing
          = Foo String
          | Bar Int Double
          | Baz String String

        case thing of
          Foo s -> putStrLn s
          Bar i f -> -- ...
          Baz s1 s2 -> -- ...

If you later add another variant to Thing, the compiler will check that all pattern matches against it account for the new case. (Wildcard matches alleviate the need always to handle every case.) An if-elseif chain, however, would still compile after adding the new variant, so you must track down the usages manually.

<comment><USER10> Aha, thanks for that bit, I didn't realize that. I thought Swift, which has a switch/case statement that does not have automatic fallthrough and which has to be exhaustive, was special in that regard. (Although in Swift you can in most cases just do a 'default' case too, not sure how that works with pattern matching)

<comment><USER11> This is why functional programmers get so grouchy - it's great that Swift has picked up this kind of functionality, but ML family languages have had it for 40 years now :/. Worse is when a feature gets dismissed as "incomprehensible" for years until it gets picked up by some fashionable language and then suddenly everyone's excited about it.

<comment><USER12> Pattern matching is awesome, and ML definitely gets the credit here for putting it into practice, but matching is arguably not even part of the functional paradigm. Lots of non-functional languages could _greatly_ benefit from pattern matching and sum types.

And indeed, when you look at a language like Nim and Swift, that's exactly what happened. Rust, too, although Rust is arguably a functional language.

<comment><USER13> Rust is arguably a functional language? I'd _love_ to hear the argument that says that it is...

<comment><USER12> > I'd love to hear the argument that says that it is...

[http://science.raphael.poss.name/rust-for-functional- program...](http://science.raphael.poss.name/rust-for-functional- programmers.html)

I personally think Rust isn't functional, but rather multi-paradigm with a strong functional influence. But if you were to add TCO and a few other features, I think Rust _would_ be a full-blown functional language, so it may get there yet.

In any case, it's useless arguing over (should have known better than say anything), so this will be my last word on the issue.

<comment><USER13> I wasn't actually looking to argue; I was looking to understand.

And I guess it's going to come down to "whose definition of FP are we using?" If FP means "I can write in a functional style", there are many more functional languages than if FP means "I can _only_ write in a functional style". That debate - about whose definition of FP is correct - is one that I can't bother to care very much about.

</comment></comment></comment></comment></comment></comment></comment></comment></comment><comment><USER14> I have never seen a manager complain about the use of functional programming.

What I have seen is amazingly intelligent programmers with FP backgrounds (who I pushed to hire) try to write in languages that are sort of FP (ie Java and Javascript). They end up writing code that is not canonical (which I don't mind) and using academic/haskell variable names (ie single letter variable names which I do mind heavily) and then fail to write any documentation (anecdotal observations).

I'm not saying this always the case but I have seen it quite a few times.

<comment><USER15> Isn't that a bit like hiring a sniper and then sending them into battle armed with a nerf gun? ;-)

<comment><USER16> Probably more like sending them in with an AK-47. Each is great at what it does, but you will fail if you assign a person trained with a different weapon to the wrong task, and ask them to use an AK47 like a sniper rifle, or vice versa.

</comment></comment></comment><comment><USER17> Well, if the functional code people are complaining is on the same level as the one the author used on the post, then I agree that a quick pair session is enough to "solve the conflict".

But IMO there is problem when (assuming Scala here) you include a library like Scalaz on the codebase, and then start using more abstract functional concepts. While I think these concepts are amazing, I usually don't use then on my day job as I know that my team don't have the knowledge nor the timing to quickly grasp such concepts without impacting the project's pace.

<comment><USER18> We need more reasonable people like you :-)

</comment></comment><comment><USER18> Sounds like the author is sharing a personal story here. I'm guessing he wrote some FP code and one his coworkers complained about it.

OP, two pieces of advice:

\- Ask yourself why your coworker went to your boss instead of talking to you directly

\- Work on your communication skills with your coworkers. I'm guessing you have an attitude that's rubbing them the wrong way (I've seen a lot of this coming from people who are trying to impose advanced techniques upon a team that's not ready for those).

It's startling how so many bright programmers possess so little social awareness.

<comment><USER19> It's amazing how you can tell so much about a person just by reading one short article. To me, your advice comes across as condescending. Maybe you need to work on your communication skills too?

Regardless, what's the practical solution to managing complexity in a team "that's not ready"? At some point, most projects get complex enough that you're going to have to do _something_ that someone is going to find confusing. It could be functional, OO, whatever.

If you've got complexity to manage and can't use reasonable tools to manage it, you may have bigger problems. Pandering to the hypothetical lowest common denominator developer isn't going to help much, because they're probably not going to "get it" anyway and will likely make a mess in any case.

<comment><USER11> Brian McKenna is a public figure who people could easily have encountered in other ways.

In my experience many functional programmers, myself included, _do_ generalize where they don't need to (e.g. writing a function to accept any F[_]: Foldable when it's only ever called with List). At which point asking them to justify the abstraction is entirely justified. Conversely in cases where fancy functional techniques really are improving maintainability it's usually pretty easy to demonstrate this by comparing two implementations side by side.

<comment><USER20> An advantage of using the most general signature possible is it restricts the things you can actually do with the values involved, which can make it easier to provide correct implementations.

</comment></comment></comment></comment><comment><USER21> I've found usually if you cleanly explain what you're doing and go through some examples people are willing to learn. Not sure if I've been lucky in that regard, but I've never had the problem this guy clearly has before, with integrating functional ideas into code.

I've also found that quite often I actually am at fault because it is reasonable to want to break up dense code into smaller understandable blocks, and while you _can_ write an entire function (or application) as one statement in an FP style, your job isn't to show how cool you are, it's to write code that your peers can maintain.

_(Like that last paragraph. It probably should have been more than once sentence. We live and learn.)_

</comment><comment><USER22> This satire is more sad than funny, because it's true. A manager's job isn't to understand good code, it's to understand business and to know how to effectively get rid of road-blocks for programmers on the team. But how can they make decisions about how to make progress easier/smoother for every programmer, if they don't understand programming?

It's kind of like when my kids are arguing without being able to solve it on their own, and I hear it from my office, and have to go over there to potentially solve the problem for them. What if they're arguing over a dispute over Pokeyman cards? I don't know anything about Pokeyman, and I can't learn well enough to give helpful advice or make firm rules on the spot.

It seems like the best solution in both cases is to trust the person who's most "senior", either the senior developer or the oldest kid or whoever, to make a judgment call to know what to do here. Probably the other programmer should be brought up to speed on _how that code works_ so when they encounter it next time, it's not confusing.

Is that always practical or even possible? Probably not in a large corporate setting. But in smaller companies, I'm confident it probably always is. Of course, so long as the code isn't _intentionally_ clever. As long as it's at least _trying_ to be clear what it does, that should be good enough. But intentionally clever code should almost always be rewritten, because it's usually so clever that even the author can't understand what it does in 6 months' time.

<comment><USER23> There is an even better approach than trusting the most senior that will have a longer term payoff. The dispute is usually caused by a lack of people skills in one or both of the parties. If you can instead take this as an opportunity not to resolve a pokemon dispute but instead to teach dispute resolution skills to both then you don't need to know enough pokemon to resolve it. And the next time a dispute comes up around something you don't have enough information to be authoritative about the involved parties might be able to resolve it themselves.

</comment></comment><comment><USER24> Adding two numbers together without being pure? Isn't that how we always do it?

        MOV edx, 1
        MOV adx, 2
        ADD eax, edx

<comment><USER25> Does that actually work?

</comment></comment><comment><USER26> Welp. The code would add the user himself as his own coworker in both versions.

I'm a Java programmer by day, but i have definitely learned a lot by writing some "functional" (i.e. in a "functional" language) code as well. But this is just concepts. You can also take those concepts and write clean (and not too bloated) OO code. I really don't get what all this exaggerated "functional programming" vs. "bad object-oriented enterprise code" ranting is good for

</comment><comment><USER27> I sense a little bit of a condescending attitude in such posts, and that does not help 'non-fp' progs to want to join the super world of fp elite programming. Personnally I've started learning Haskell and I love it. But having a denigrating attitude towards OOP-ish programming is simply polarizing and does not help the 'cause' ...

</comment><comment><USER28> I realize this is mostly frustrated satire - but it is an actual issue when working with coders of different skill levels.

The solution is to simply drop the use of flatmap (or any other function which eliminates loops). In my experience, that level of abstraction is the kind of thing which confuse new developers who have not (yet) been exposed to the terminology introduced by functional programming. It comes across as "clever" and "obfuscated". And it really is quite clever - you turn a 4 line for loop with accumulators into a single line of code. But it's also legitimately obfuscated as well, until you grok how flatmap works.

Ultimately, a for loop can be understood by almost any programmer you will encounter. There's more code, it does the exact same thing as a flatmap, but (as the OP points out) the function is still pure.

<comment><USER29> It is counterproductive to cripple the programmers on your team who can handle abstraction to avoid confusing the ones who can't. Why turn 10x coders into 9x coders or worse just to retain your 1x coders? Or work with the ones having trouble with a pattern until they get it?

<comment><USER30> That's the management decision in the article. And I make the same decision. We're not an organization that attracts nor hires rockstars (or, as you say, 10x coders). We have a couple really sharp folks but are predominately staffed by "1x" coders. Therefore, it is important and the responsible thing to do to write all code so that it can be understood and maintained by a 1x coder.

Even if it is being written and currently maintained by one of our sharper folks, people move on or change roles, and projects shift to other staff for long term maintenance. Who's going to be maintaining this project in 2-4 years? This project needs to be written with them in mind.

<comment><USER31> I have to ask, where do you draw the line? I had a team lead that disliked me writing things like (in C#, been a bit so forgive errors):

      List<AClass> original; // perhaps as a parameter to the function
      List<AClass> filtered = original.Where(x => x.Field > 10);

Arguing that I should instead have just used for loops (showed him foreach and he agreed that that was better, at least) like:

      List<AClass> filtered = new List<AClass>();
      foreach(x in original)
        if(x.Field > 10) filtered.Add(x);

Ok, so it's _only_ two lines longer (three if you split the if and its effect, 5 if you also add in braces, 7 if you put opening braces on their own lines). The `Where` version is not that complicated, and only requires understanding one (potentially) new concept for programmers, namely anonymous functions.

Wouldn't the briefer, but still clear, code be preferable for maintenance?

<comment><USER30> Yes absolutely. I don't say "no functional constructs" nor does anyone else here that I know of. However, composite LINQ statements, especially involving aggregation can and do become confusing. Obviously it's a judgment call but in many cases, breaking out a complex expression into incremental, imperative steps can and does make it clearer.

The "rule" I apply is "code should be written primarily for people to read and only incidentally for machines to execute" which, although very subjective, provides a good foundation for everyone to start from.

</comment></comment></comment></comment></comment><comment><USER32> I think a lot of the abuse happens in Java, and java-derived languages. There is a culture,and the more lines of code you have , and the more classes you have , the better. The language environment and frameworks only re-inforce that stuff. Scala is (I guess ) functional - particularly when contrasted to Java.

In his example, I suspect he is conflating that one-liner chained function call with functional programming? Sort of like how coders like to use ternary one-liners especially when they first learnt them (and end up with unreadable code). But his first snippet is obviously simpler, compared to the OOP-cruft of the second and third snippets.

As more Java programmers migrate to coding in Python, they are bringing that toxic culture in to Python too - where boilerplate and sugar were relatively less.

Its like everyone is doing rocket science, which is despicable, given we are mostly coding CRUDs.

Any language is susceptible to abuse, its also a human trait to de-simplify something to gain a fake intellectual satisfaction.

</comment><comment><USER33> This is where I think LINQ does a good job.

      var coworkers = departments.selectMany(department => department.employees);

Nearly equivalent to the Scala code, but uses more approachable keywords like `select`, `selectMany`, and `where` instead of `map`, `flatMap`, and `filter`.

<comment><USER34> It makes a lot of sense in .NET land, because it maps to SQL, which people tend to have some kind of grasp on.

Although that LINQ expression syntax can go die in a fire. It's a great way to end up with people using borked up joins in Linq-to-SQL and EF that don't work the way they think they do, rather than the actual foreign-key relationships.

</comment></comment><comment><USER35> s f g x = f x (g x)

k x y = x

b f g x = f (g x)

c f g x = f x g

y f = f (y f)

cond p f g x = if p x then f x else g x

fac = y (b (cond ((==) 0) (k 1)) (b (s (*)) (c b pred)))

<comment><USER36> You don't need if-then-else, you can emulate it by applying k and (s k) (which can represent true and false).

</comment></comment><comment><USER37> Wait, am I missing something? Isn't the "non-functional" code here wrong? There seems to be no filtering for only those departments that belong to the user's business, unlike the functional example where it uses "user.departments"

</comment><comment><USER38> What language does the article use for examples? I don't recognize it.

<comment><USER39> Scala

</comment></comment><comment><USER6> Oh no problem.

fac n = result (for init next done) where init = (0,1) next (i,m) = (i+1, m * (i+1)) done (i,_) = i==n result (_,m) = m

for i n d = until d n i

</comment><comment><USER40> One way to solve this problem is to show them this article. I'm bookmarking this in case the situation ever pops up.

</comment><comment><USER41> I can understand that concepts like flatMap, merge, reduce and zip can be intimidating at first. It would help to explain what they are and how they work with smaller examples outside of project code base.

[https://jsbin.com/bemasodemi/edit?js,console](https://jsbin.com/bemasodemi/edit?js,console)

<comment><USER10> One argument I'd like to use at one point is to explain a for-loop and what it does - intimidating? How about initializing a numerical variable, then creating a loop that checks the value of said variable, increments (or decrements), and in case of array operations, attempts to get an entry in that array in each loop.

Versus for-each-entry-in-list-do-this.

<comment><USER41> Be pragmatic, there's a higher chance that a developer has used said concept than the FRP mentioned above.

Funny you should mention that for loop as it's been removed from Swift 2.2 ;-)

</comment></comment></comment><comment><USER42> Apparently this submission is flagged and sinking. In addition to being bureaucrats, the OO hordes are apparently without humor, too. Or perhaps one goes with the other.

<comment><USER43> It's not really that funny.

<comment><USER44> Worse, there doesn't seem to be a point. It sounds like a Haskeller's rant over how OOPers don't understand basic concepts. And, to be fair, a lot of them don't, can't count how many times people have mistaken static typing for object-orientation.

But this isn't the way to point that out. Should we be surprised that a modern multi-paradigmatic programming language can be used to code in a functional style?

</comment></comment></comment><comment><USER45> I feel like there's potential for a "How to stop being a smartass" rebuttal article here.</comment>


Show HN: Feed the Quine - <AUTHOR> https://mbuliga.github.io/feed-the-quine.html <comment><AUTHOR> Now there's also [1] ouroboros: the story of the first quine, and [2] more quines and random eggs

[1] [http://imar.ro/~mbuliga/ouroboros.html](http://imar.ro/~mbuliga/ouroboros.html)

[2] [http://imar.ro/~mbuliga/more-quines.html](http://imar.ro/~mbuliga/more- quines.html)

</comment><comment><AUTHOR> Some details: based on [1], it allows to play with the quines (via mouse interactions) and understand how these work, visually.

Not part of my current project, but it responds to a demand I had for years. My contribution was to use the script with examples, old and new. Is so nice and interactive that now I wish for a game.

[1] [https://github.com/ishanpm/chemlambda- editor](https://github.com/ishanpm/chemlambda-editor)</comment>


Berlin.AI Summit Coming Up Thursday - <AUTHOR> https://www.eventbrite.de/e/berlinai-berlins-quarterly-ai-summit-tickets-27056329209 <comment><USER2> Fred, co-organiser here. Feel free to forward to anyone who builds products based on Machine Learning and can be in Berlin this Thursday.</comment>


Your Venture Not Ready for Prime Time? This Site Can Help - <AUTHOR> https://www.nytimes.com/2017/07/26/business/collaborizm-pre-incubator.html <comment><USER2> Rob the CTO of Collaborizm ask me anything!</comment>


CNTK 1.7 Release Notes - <AUTHOR> https://github.com/Microsoft/CNTK/wiki/CNTK_1_7_Release_Notes <comment><AUTHOR> A couple of nice (and approachable for beginners) hands-on tutorials are now supported in 1.7 [0][1]. Also, quite a few features have been added [2] since the initial release[3].

[0] Image Recognition on CIFAR-10: [https://github.com/Microsoft/CNTK/wiki/Hands-On-Labs- Image-R...](https://github.com/Microsoft/CNTK/wiki/Hands-On-Labs-Image- Recognition)

[1] Language Understanding with ATIS: [https://github.com/Microsoft/CNTK/wiki/Hands-On-Labs- Languag...](https://github.com/Microsoft/CNTK/wiki/Hands-On-Labs-Language- Understanding)

[2] CNTK News: [https://github.com/Microsoft/CNTK/wiki/News](https://github.com/Microsoft/CNTK/wiki/News)

[3] HN discussion: [https://news.ycombinator.com/item?id=10967196](https://news.ycombinator.com/item?id=10967196)</comment>


Pandas needs your help. Please donate - <AUTHOR> https://twitter.com/wesmckinn/status/909772652532953088 <comment><AUTHOR> You can donate to: [https://www.numfocus.org/open-source- projects/](https://www.numfocus.org/open-source-projects/)</comment>


The Story of Christoph Niemann's Petting Zoo App - <AUTHOR> http://www.newyorker.com/online/blogs/culture/2013/03/christoph-niemann-petting-zoo-app.html

<comment><USER2> So good at telling a story in an approachable way, but still a smart and open- ended way. Here's a quote where he discusses a piece he did for a show my wife put together:

 _For me the ideal joke consists of the viewer/reader providing 98% of the idea, and the illustration just filling in that last tiny piece of the puzzle, that makes everything come together.

Much of my work certainly wouldn't have happened without the inspiration I am getting from spending time with my kids; but I try to use this light and playful approach merely as a visual Trojan horse to tell a more or less grown- up story. One thing has changed though: since I have kids I can lay on the floor for hours, playing with legos and wooden bricks and pretend that I am actually working._</comment>


Rate my startup: SolidComposer - version control for musicians - <AUTHOR> http://solidcomposer.com/

<comment><USER3> From the HN title I thought "fantastic, that's a brilliant idea", but I honestly can't imagine anyone I know using what you're building.

If I wanted a remote session player to do some overdubs on a track, I'd FTP over a rough mixdown or use Indaba. Dependency management is a really difficult task given the amount of proprietary software and hardware in use - the people likely to pay you money for this sort of thing are unlikely to be using many free plugins. If you've got a regular collaborator then you can sort out a common toolset, but that rather nullifies the point of dependency management. Ableton Share works acceptably well, but only because it's deeply integrated with Live. Image-Line dropped collaboration because they considered it more hassle than it's worth. If you reckon that it'll be less hassle for you or that you can extract more value then I wish you the best of luck, but I certainly don't see how.

The project I'm working on at the moment runs to 1.6GB and that's just a 4 minute pop song. A full day of recording a band can easily produce 30GB worth of data and that's at low bit rates. The good DAWs manage alternative takes rather well, certainly well enough that I'd be loath to tie up my broadband for two days after every session for version control.

To take you on your own mission statement, I have absolutely no idea how your product would make me better at making music, help me waste less time with my computer or make it more convenient to collaborate. Maybe I'm totally atypical, but I don't think so.

You want my opinion? Discard everything but collaboration and focus on Reason. It's a closed box, so no dependency problems. It doesn't do audio recording, so no massive files. It can natively bundle project samples into its file format, keeping things simple for the user. I don't like Reason, I don't like people who do like Reason, but it appears to be the only thing that'll do what you're looking to do without a long list of caveats and ballaches.

<comment><AUTHOR> You've identified one of the limitations of this service: it requires the musician to think about file size when creating a project. I agree that it is a serious flaw, but I do not think it is a show-stopper.

I generated 10 minutes of white noise and saved it as 320kbps mp3 and quality 10 ogg. The file size of each is 22.9 MB and 18.1 MB, respectively. Let's say we have a 10 minute long song (that's _really_ long) with 4 layers, and you end up re-recording everything twice from start to finish. 20 MB * 4 * 3 = 240 MB for the entire project. That means in the Lite plan you get 42 songs. Sounds pretty reasonable to me.

The obvious argument is that as a musician, you want completely lossless compression. I say that quality 10 OGG is good enough, although if you simply cannot accept that, I understand.

Also, I have plans for creating a program that runs in the background of your computer and does all the dirty work for you.

<comment><USER3> I think you may be badly underestimating the track count of a lot of projects. If you aren't banking on having access to all the project plugins at the other end, then any track that is generated or processed by a plugin that isn't part of the factory set will need to be frozen to audio. Obviously there will be no alternates for these tracks, but they still add up. If you're recording live audio, then think of a number, add your age and double it. I would typically mic up a drum kit with between eight and fourteen microphones, depending on the size of the kit and the quality of the room. That is by no means excessive - a bargain-basement set of drum mics will usually consist of seven or eight mics. An electric guitar should get at least three tracks - two mics on the cab and one for DI. A decent pop vocal sound usually demands several tracks for the lead, plus backing. To give you an idea, Greg Kurstin used in excess of 70 tracks on most of the songs on Lily Allen's "It's Not Me, It's You" - <USER2> album recorded with only one singer, one microphone and two real instruments.

Lossy compression is absolutely unacceptable for work-in-progress files. The point of this exercise is to allow project files to be bounced back and forth between collaborators relatively seamlessly. Introduce lossy compression and you have to worry about generational loss - if the guy at the other end edits the file then it goes through the codec again and before long you've got a photocopy of a photocopy of a photocopy. All the major DAWs can import MP3s, but those that I'm familiar with need to decode them back to WAV/AIFF to handle them internally. This would demand something reasonably clever on the client-side to prevent all sorts of difficulties when an edited song is re- exported and uploaded back, because even without any edits the decode-encode cycle would mean that an exported track would diff with the originally imported version. It also takes bloody ages to bounce every track in a project to MP3, although that could be simplified somewhat if your planned client tool handled it.

Also a 10 minute song isn't _really_ long - it's long for a pop or rock single, but by no means unusual for a 12 inch mix in a lot of dance music genres. Seven minutes is about average for House these days.

</comment></comment></comment><comment><USER4> Too many ideas on the main page. I showed up looking for version control due to the HN link, but when I get there I see composer, compete, collaborate, "the producer in you", backup, studio support (?). I suggest focusing on one compelling feature/message.

It would be a lot more credible to feature a few (good) tracks on the front page.

The Arena and Workbench buttons have no mouse-over help text, and at first glance seem unrelated to everything else on the page.

It's not entirely clear what sort of software/hardware I need to get involved here. I used to work with Cubase and Wavelab, for example. Can I just upload WAV files from whatever? The "How does it work" section isn't explicit about which formats it deals with.

It seems strange that you can go visit competitions, but not project or user pages, which I thought were the main point of the site.

I love the legal section.

</comment><comment><USER5> I was in a touring band for a few years between roughly 2001-2004, during which time I was freelancing - literally coding in the van with my laptop and a GPRS card.

My band was relatively email savvy, but I regularly met bands that didn't contain a single individual that was tech savvy. If they had band email or a Myspace page, it was usually run by a "manager". I found this phenomena sad and scary, but it really was a culture thing.

I suspect it'd apply less to the electronic music folks, due to the inherent geek savvy required. However, _tl:dr;_ I have a hard time picturing most of the musicians I've played with understanding the basic concepts of version control. Heck, I bet most wouldn't get it after the third explanation.

Musicians aren't dumb, but they are usually hung-over. Conflict merging is not punk.

</comment><comment><USER6> I'm a musician ( mostly analog one ) and have no idea from looking at the front page what I could get out of this. Unless you are just looking for a small subset of musicians, I would suggest a more beginner friendly explanation of how it could be used. I had to dig into a non-obvious point to figure out what you were doing and only because I also program did it all really make sense to me.

<comment><AUTHOR> Good point. I put a lot of effort into this page: <http://solidcomposer.com/article/introducing-solidcomposer/>

Perhaps I should try harder to get the user to click the "How does this work?" link or use some of the same content.

<comment><USER7> When I looked at the home page, I thought the "how does this work" links were to different pages or popups, each for an explanation of just that specific piece.

Instead of "how does this work?" repeated 3 times, maybe you could put a single link that says "see how it all works".

</comment></comment></comment><comment><USER8> Awesome. I'm an FLStudio fan since version 2.

re: soundcloud

Consider removing the reference to soundcloud. The best it can do is give give the lawyers an excuse to go after you for UI Copyright infringement.

re: value prop

The intro page does a good job motivating someone to use the product, but the homepage doesn't help sell the product at all. See if you can summarize the pain points on the homepage.

Also consider putting up a forum for musicians to collaborate/share/find each other (ala FLStudio Looptalk). The fastest way to get people to use a sharing product is to help them have people to collaborate with ;)

Good luck!

</comment><comment><USER9> This is a great idea, but wow, there's going to be a lot of big files stored and how much could one possibly charge for this is uncertain. I have a small studio. If I was faced with paying let's say a reasonable $120/yr fee for this service, I am pretty sure I would just lay out $120 for a backup drive instead. So for the sole songwriter with technical abilities (needed to use electronic music production software like DAWs) it's questionable. Now for the collaborative job, yeah, I can see that working. It's a big hassle to keep tracks synchronized with what other people are doing, so if done right there could be a demand for this. The cost of getting it done right might be prohibitory though. The first thing that will happen is the FL guy wants compatibility with the Cubase guy wants compatibility with the ProTools guy, which is a bigger problem.

Looking at the actual pricing plans, $228/yr for the medium 20G plan. 20G doesn't go far in my studio, so this wouldn't work very well as a long term backup/version control system, it would only be useful for collaboration of a few projects at a time and then I'd have to dump projects.

The $1068/yr plan is just too much for me to pay for 100G storage. I can rent a dedicated server with 2TB storage for less than that. Also even 100G doesn't hold my projects from the last six months.

I think it's the cost of providing bandwidth and storage for this stuff, it's a serious challenge to the viability of this startup. What you have sounds cool and I bet it works really well, but the file size issue and the cost, man oh man.

<comment><AUTHOR> You've inspired me to triple the space given out for paid plans.

</comment></comment><comment><USER10> I played around with this a bit when we were discussing it in the #startups IRC the other night, and I think this is a very cool idea. It certainly would have helped back when my band was in the studio, in terms of making ongoing collaboration with our producer much easier.

The best way to think about this is full-service multi-person versioning for sound projects. It also analyzes your project files and makes sure all the dependent sound files are present and error-free (from what I understand).

I think this will especially become useful for studios when it supports project files from Logic, etc, and especially when it can work directly as a plugin for these programs without needing to log into the website and check stuff out and upload updates.

</comment><comment><USER11> There are some interesting ideas here, but it feels unfocused. I suspect that collaboration is where the really interesting opportunities are. To my mind, version control is simply one possible feature you can offer to make collaboration more fruitful.

A lot of companies have interesting offerings in this space, but I haven't seen anything truly compelling yet. Perhaps the most direct competition is bundled with the tools themselves: for example, FL Studio has [edit: had] Collab and Ableton has Share.

You also support LMMS. But few if any serious musicians use LMMS; it's just not a high enough quality tool. Even if you are targeting people like me -- dedicated hobbyists -- you're still more likely to want to target Ableton and FL.

<comment><AUTHOR> Image-Line dropped support for collab, and people are sad [1].

I agree that I need to support Ableton and Cubase. I'm going to start working on more studio support right now.

As for LMMS, I suppose I supported it just for fun. I've contributed to LMMS, and compared to .flp, support for it was dead simple.

[1]: <http://forum.image-line.com/viewtopic.php?p=176830>

<comment><USER11> I missed that about Collab, actually. Interesting.

By the way, how do you crack the FL file format? (Or do you?)

<comment><AUTHOR> A couple things.

A long time ago, the author of FL Studio made a document explaining the file format. That was version 4 or something. Since then much has changed.

However Tobiass Doerrfel, the author of LMMS, did a bunch of reverse- engineering of the fl studio file format.

Then I did some emailing with Didier and a guy named Frederic, who did the Fruity Wrapper (needed to get plugin names).

The results are open source: <http://github.com/superjoe30/PyDaw>

<comment><USER11> That's really awesome -- have always wanted to find something like this. Thanks!

</comment></comment></comment></comment></comment><comment><USER12> It's a cool idea. But the first time that I saw the homepage I had no idea what is about. You need to make it clear.

What mean "Unleash the producer in you."??

If I don't know what is for in less than 5 seconds I'll probably close the page.

Check out these ones as examples: <http://basecamphq.com/> <https://www.dropbox.com/>

</comment><comment><USER13> The "click here if you want to sue us" gag on the legal page is cute, but now I'm thinking about all the possible reasons someone would want to sue you.

</comment><comment><USER14> Love the idea.

Take a look at <http://www.merge.fm> \- they're doing something similar but making the barrier to entry trivial.

They're allowing normal people to interact with their favorite artists DURING the songwriting process. Who knows if it will gain widespread adoption, but it's an interesting approach nonetheless.

<comment><AUTHOR> Cool, that's a great idea. Very similar. I'll have to keep an eye on them.

</comment></comment><comment><USER15> Cool idea if you are a composer who likes to use version control! I just recently started putting my GarageBand projects in GitHub =)

<comment><AUTHOR> That can work but there are some problems:

* you don't have a "git log" with an audio preview in each version

* what about all the samples that your project depends on? Do you add them to the repository? What about when you have two projects that use the same samples? What happens when your hard drive gets wiped and you lose the samples you didn't commit to the repository?

* what about the plugins you use? github can't keep track of the dependencies of the project.

* what if you want to collaborate on a project? if two people edit and try to push, you'll have a conflict which is _impossible to merge_

SolidComposer solves all of these problems.

<comment><USER15> Yes, I agree...GitHub or any text-centric SCM is a very simplistic solution that really only works (and not very well) for metadata in audio projects. These points are good answers to the question, "How is SolidComposer better than using another version control system for my compositions?"

But I guess my gut reaction — which you can take with many grains of salt because I don't do any work in a collaborative music composition situation — is that of "Geez...it's hard enough to get technical people to jump into my version control workflow, how could I get musicians in on this?" (Which I think you already addressed in another comment that your target audience is maybe the overlap of developers/composers.)

I'm reading through your Introducing SolidComposer page and I think it would be helpful if you could condense that down and put it somewhere more accessible (maybe on the front page). I find myself not really wanting to spend time figuring out how the app will help me.

Also, the How Does It Work? section actually does not seem appealing. The first situation seems simple and straightforward, whereas when you talk about SolidComposer complaining about missing dependencies, that starts makes me feel uncomfortable.

Anyways, I hope this is helpful and good luck with the project.

Side note: I recently started playing in a band and one thing I notice is that whenever we get together to practice a particular song, we are always reinventing the song and it never really seems to gel. It's always "How does that part go again? How many measures were we supposed to play that riff?" Could SolidComposer help in that situation?

</comment></comment></comment><comment><USER16> Tuis is something me and my friends have wanted for years. We're primarily Reason and Live users but this might be worth trying FL Studio for.

</comment><comment><USER17> Great idea, even though I'm not a musician. What I'd really like to see would be a completely versioned filesystem like on VMS.

</comment><comment><USER18> I need not read your post, nor try your app. Keep going man... this is a great and long overdue idea.

</comment><comment><USER19> I think this would be cool if the software would try to obtain the dependencies automatically.

<comment><AUTHOR> It does, if you've ever uploaded the dependencies before. It would be copyright violation to do it if you hadn't.

Also since the studio uses only the filename as the identifier, you might make invalid assumptions.

<comment><USER19> Sure, I'm just pointing out a potentially valuable problem to solve.

Yes, copyright is a problem but it can be worked around somewhat. I would probably start by searching for open source sample libraries to see if anything is worth building on. Obviously people using only their own samples will have to upload them somehow.</comment></comment></comment>


Things I Wish I Knew Before I Started Coding - <AUTHOR> https://medium.com/better-programming/10-things-i-wish-i-knew-before-i-started-coding-c35a58855b7e <comment><USER2> 2 more:

1) If you are not careful, it's easy to burn out.

2) It's a young person's occupation. Plan for its consequences.</comment>


Microsoft's reveals its internal marketing technology stack - <AUTHOR> http://chiefmartec.com/2017/03/microsoft-shares-marketing-stack-stackies-awesome/ <comment><AUTHOR> ..and it's not all Microsoft products.

The diagram was submitted as an entry for martech.com's 'stackies' award - <USER2> is worthwhile reading for anyone who wants to know which marketing technologies the big guys are using.</comment>


Google is reporting itself as a malware distributor. - <AUTHOR> http://www.google.com/safebrowsing/diagnostic?site=http://www.google.com

<comment><USER2> What IS interesting is that you can actually put in any other domain and find the results of malware diagnostics.

[http://www.google.com/safebrowsing/diagnostic?site=http://ww...](http://www.google.com/safebrowsing/diagnostic?site=http://www.facebook.com)

[http://www.google.com/safebrowsing/diagnostic?site=http://te...](http://www.google.com/safebrowsing/diagnostic?site=http://techcrunch.com)

[http://www.google.com/safebrowsing/diagnostic?site=http://ok...](http://www.google.com/safebrowsing/diagnostic?site=http://okoun.cz) (one Czech discussion server I visit time from time)

and so on.

<comment><USER3> That can't be working right. It doesn't even check if the site parameter is actually a site - [http://www.google.com/safebrowsing/diagnostic?site=gobbledyg...](http://www.google.com/safebrowsing/diagnostic?site=gobbledygook)

<comment><USER4> Smells like...a bloomier filter!

</comment></comment></comment><comment><USER5> The alternative, Google turning a blind eye to its own domain, would be far worse.

</comment><comment><USER6> ©2008 Google

Forgive my ignorance, but why don't companies program the copyright year to automatically update?

<comment><USER7> The year is supposed to be the first year the work was created. You can do 2008-2012 if you want though (and let the end year automatically update). But since that's the assumption if you don't include the end year, there isn't any reason to do it.

<comment><USER6> Facebook © 2012

The content of Facebook wasn't first created in 2012, so I'm not sure if you're correct. In fact, I've noticed that the majority of sites don't include a date-range. Regardless, thanks for the info.

<comment><USER8> Didn't Facebook just update their website thus having a new copy write?

<comment><USER7> No, it's a mistake, they should have left the original date. If you update it you are supposed to do year, year, year or a range.

See: <http://en.wikipedia.org/wiki/Copyright_notice>

<comment><USER6> I still doubt that Facebook, Microsoft, Yahoo, Twitter, etc. are all mistaken in listing the current year in their copyright. That seems implausible.

<comment><USER9> Things aren't as cut and dry with legal traditions. I'm sure there are tons of scraps of legal language that remain in use only because it's traditional and few people know any better. Like some kind of legal shibboleth.

Like coderdude said above[1], whenever you see "All Rights Reserved"[2] you're seeing it in action.

1\. <http://news.ycombinator.com/item?id=3541501> 2\. <http://en.wikipedia.org/wiki/All_rights_reserved>

</comment></comment></comment></comment></comment></comment></comment><comment><USER10> its actually different for www.google.com and google.com. Any googlers care to explain why?

<comment><USER11> is it possible that google.com also includes subdomains like plus.google.com?

</comment></comment><comment><USER12> Don't be evil.

<comment><USER13> Don't be a jackass.

</comment></comment><comment><USER14> interesting.

<comment><USER14> well sorry for it not being as interesting as i thought...

<comment><USER15> A post that just says "interesting" is noise, so people will downvote it.

<comment><USER14> damn, and here i thought i was "safe".

but apparently someone said its a repeat, and a fake, and yet offers no explanation why. Do you know why?

</comment></comment></comment></comment><comment><USER16> Heh, working as intended I suppose.

</comment><comment><USER17> Repeat: <http://news.ycombinator.com/item?id=934669>

<comment><USER18> Not really - that's about Google listing Dropbox.com as suspicious. This is about Google listing _Google_ as being a source / intermediary for malware.

</comment></comment><comment><USER19> Don't be evil?

So, this is the final proof that the mantra has been forgotten and Google has move to the dark side… Is it?

<comment><USER20> No, it shows exactly the opposite. Google doesn't except it's own servers from the malware search.</comment></comment>


Show HN: A Google News/Maps mashup - GlocalNews - <AUTHOR> http://glocalne.ws/

<comment><USER2>
       "How to use our website

       1) Choose your country/language from the Localization menu.
       2) Drag the pin to the desired place, globally.
       3) Zoom in to reveal more local news. The results are refreshed dynamically.
       4) Enjoy the information overload. There is no step four."

Information overload ... just what the doctor ordered. On a serious note, great job guys.

<comment><AUTHOR> thank you, kind sir.</comment></comment>


Upcoming Changes to the Firefox Bug Bounty Program - <AUTHOR> https://blog.mozilla.org/security/2015/06/09/upcoming-changes-to-the-firefox-bug-bounty-program/

<comment><USER2> Highlights

* sec-medium bugs can optionally receive payout now

* The $3000 cap has been removed, 3000 is now the floor for sec-high and sec-critical

* Sliding scale for payouts based on the quality of the information

* Hall of fame - [https://www.mozilla.org/en-US/security/bug-bounty/hall-of-fa...](https://www.mozilla.org/en-US/security/bug-bounty/hall-of-fame/)</comment>


An Ancient Tsunami That Ended a Civilization Gets Another Look - <AUTHOR> http://www.nytimes.com/2016/11/10/science/santorini-akrotiri-tsunami.html <comment><USER2> [http://www.nature.com/articles/ncomms13332](http://www.nature.com/articles/ncomms13332)

Here's a link to the actual paper, the times article read more like a footnote.

<comment><USER3> Thanks for the link. I hadn't realized the enormous amount of matter involved in a pyroclastic flow... And I find solace in well documented and articulated articles as this one.

</comment></comment><comment><USER4> [https://en.wikipedia.org/wiki/Toba_catastrophe_theory](https://en.wikipedia.org/wiki/Toba_catastrophe_theory)

Toba is another one that _may_ have caused the population bottleneck ~50k YBP.

One thing to learn from these various events is that our lives and civilizations are very fragile in the short-term, but that humans as a species are amazingly resilient. At least, I hope so, survivorship and whatnot.

<comment><USER5> I wax poetic about this pretty often - but it's always been amazing to me that me, and you, and everyone in the world has an unbroken chain of ancestry all the way back to the first spark of life.

We're all stupendously lucky in that regard.

<comment><USER6> Of course, if that weren't the case, there wouldn't be anyone around to feel lucky. :)

<comment><USER5> I do quite enjoy that survivorship bias!

</comment></comment></comment></comment><comment><USER7> And yet we cant come up with a good explanation for the younger dras??

</comment><comment><USER8> ╰[•̀o•́]╯

<comment><USER9> Being discussed hurts a submission's rankings. They do better when they are the kind of thing that people upvote to bookmark for later, and never get around to reading.

<comment><USER10> > _Being discussed hurts a submission 's rankings._

Only rarely is this actually the case.</comment></comment></comment>