The limited value of a computer science education - <AUTHOR> http://nathanmarz.com/blog/the-limited-value-of-a-computer-science-education.html <comment><USER3> Post number 7,819,394 talking about how useful or not useful a CS degree is to a programming job.

Here are some lessons I learned by going to school that I find incredibly useful:

1\. How to shut up and get some work done, even if I don't see the point to it.

2\. How to shut up and get some work done, even if it isn't directly applicable or valuable to a job or something I want in the future.

3\. How to take feedback and criticism from people who know better than me.

4\. How to deal with someone I don't like but who has power over me.

5\. Lots of other fascinating things that have nothing to do with my job but that learning about made me happy and appreciative of life.

6\. A handful of things that _are_ pertinent to my job, but I see this as added extras because I didn't go to school for the sole purpose of getting a job.

7\. That a lot of people seem to think that the only things in life worth learning or paying for are those that will be useful at a job. This is a sad one.

<comment><USER4> These are about going to _school_ , though, not getting a CS degree. And 100% of these things could, and probably should, be learned in the real world and not through paying tens of thousands of dollars under the guise of education.

I did not go to school for a CS degree, and that has not hampered me in any way when searching for a job in software.

All I learned in college was how to game the system of the institution itself, and that institutions like that are a societal racket and waste of time and money.

<comment><USER3> > that institutions like that are a societal racket and waste of time and > money.

This is completely wrong. Universities are tremendously useful and do many great things for society and humanity. I'm not going to provide evidence because I think that any reasonable person will agree with me.

<comment><USER5> While it's clear many university institutes and projects have benefited the wider public, I think he was specifically referring to the value of university to an individual, for most people (excepting those who are studying sciences to enter a specific niche field where they wouldn't be able to pick up the necessary skills anywhere else) university is indeed a waste of time and money. I'm a 22 year old developer based in Australia, I've been working in the web industry full time since I was 18 and been earning money all along. Yet I have multiple friends who did CS etc. at uni and despite having the formal qualifications I lack, they're earning less than me and have a good 10 years of paying off their education debt before they can actually use their earnings beyond getting by.

<comment><USER3> Once again, you've completely missed the point. I am trying to say that the value of university has nothing to do with your ability to get a job. I'm trying to plead with people to stop trying to compare university with a job or measure the value of a university in terms of a job.

If you can't see the value in university, good for you; nobody's forcing you to go.

<comment><USER6> > Once again, you've completely missed the point.

But, you didn't make an argument for your point in your last statement, and instead made a vague, mysterious assertion:

> Universities are tremendously useful and do many great things for society > and humanity.

You even explicitly pointed out this fact:

> I'm not going to provide evidence because I think that any reasonable person > will agree with me.

</comment></comment></comment></comment></comment></comment><comment><USER7> I may have been lucky, but I don't recognize this statement when I think of my own CS curriculum:

 _The vast majority of what a programmer does, forming good abstractions and avoiding complexity, is almost completely untouched by computer science curriculums._

That's the _majority_ of what my CS degree covered, in several different programming paradigms. Even the idea that there are "programming paradigms" is something I learned at university, from a great course called Comparative Programming Languages. Granted, it's one thing to study it and another thing to gain years of experience doing it, but it was certainly a big focus. I took a whole course on design and structure of OO programs, which mainly at the time focused on C++, but also covered some alternative OO models and what pros/cons various people have claimed for this style of abstraction. And another one on design and structure of functional programs, which in the case of the one I took was mainly from the ML family perspective. These had some more "theoretical" content as well, especially the functional-programming one had quite a bit on type systems, but the overarching goal of the courses was abstraction and structuring (and even the type-theory stuff was introduced as a means to the end of useful programming abstractions).

When I read these kinds of summaries of computer-science degrees, I get the impression people went to some kind of program that was 100% algorithms courses, proving big-O running times and termination properties and that kind of thing. I thought I went to a pretty theoretical one (vs. one with more of a software-engineering bent), but it was _maybe_ 20-25% algorithms. Where are people going where they are taking nothing but Algorithms 101 through Algorithms 1601 for four years?

I do agree that the standard tech company interview process seems to mainly test the algorithms part of the CS curriculum for some reason. I think tech interviewers love big-O notation tests more than actual CS academics do.

<comment><USER8> I went to an Ivy League college with a notable connection to Basic, and I didn't write a line of code for my algorithms and data structures classes, or for my AI class, for that matter. I wrote a metric shit-ton of proofs, though, and I can say with 100% confidence, that that was a complete waste of time.

<comment><USER9> I also wrote a metric shit-ton of proofs in my CS graduate education, and have that to thank for a greatly increased capability for logical thought over my undergraduate self.

<comment><USER8> I really view that algorithms class as a massive, massive wasted opportunity. There are really two aspects to that kind of a subject - the theoretical underpinnings, and the practical applications. We beat the ever-living piss out of the theory, but I doubt anyone who didn't already know how to do it came out of that class knowing how you would actually code a linked list or a graph, and what the trade-offs of various implementations were. That kind of a subject would be such a rich field for a course in low level C or Rust or [insert manual-memory-management language]

</comment></comment></comment></comment><comment><USER10> So I did a 4 year computer science degree about 10 years ago. It's really hard to understand why anyone would bash a degree. What I still find "relevant to practice" from then is:

\- Any good CS curriculum is basically a calculus, statistics, linear algebra, real analysis, combinatorics, discrete mathematics course with a bunch of CS modules thrown in on the side

\- All the computational intelligence stuff we did (particle swarm optimizers, neural networks, classification algorithms, data mining, ant colony optimization, genetic algorithms, etc.) these things were all cool but not really mainstream back then. It's all the rage right now. I'm really glad I have a good theoretical background in all of that now, it makes it so much easier to jump back into machine learning and analytics. The math I did makes it even easier still.

\- I use a lot of "full-stack theoretical understanding" of operating systems, networking, compilers and distributed systems courses to reason about why things could possibly go wrong in production performance problems on large distributed enterprise applications, and how to isolate where the problem is. I do this on a daily basis and am amazed how many professional programmers don't understand what's going on "under the hood". It's almost a Dunning- Kruger effect situation where people don't even know what they don't know.

Then this doesn't even begin to mention things like formal methods, software architecture, computer graphics, database theory, etc. Oh, and the philosophy courses, which really went into logic and critical thinking.

A CS degree is completely mind-expanding if you get it from a good institution.

<comment><USER11> Huh. I'm a 2nd year undergrad atm, and came across an instance of the nurse scheduling problem at my on-campus job. I did some research and delved into evolutionary computation, eventually deciding on genetic algorithms to solve my schedule problem. (I'm using a self-adapted version of NSGA II)

Anyways, all my research has gotten me very interested in all the topics you mentioned, also neuroevolution. I actually brought up neuroevolution and optimization problems to my professor to get his insight, but he wasn't able to help me out much.

I keep finding that people state computational intelligence was all the rage about 10 years ago, and can't find much work on what is going on with it now. Can you provide me with some more info in the field?

<comment><USER10> I can only point you to the book we used at the time: Computational Intelligence: An Introduction [http://jasss.soc.surrey.ac.uk/7/1/reviews/ramanath.html](http://jasss.soc.surrey.ac.uk/7/1/reviews/ramanath.html) Although there were many class handouts and journal papers we had to read too.

<comment><USER11> Thanks - at this point I have looked through as much material on the subject since my project really only involves genetic evolution and multi objective optimization. Time to dive in!

</comment></comment></comment></comment><comment><USER12> People don't understand what computer science is. Don't claim you did CS and it didn't teach you to become a developer, that's not what CS is, and I'm surprised that after a bachelor's and master's the author doesn't acknowledge that.

<comment><USER13> well, computer science should be MUCH more maths heavy than it is, and software development should be taught as a trade.

<comment><USER14> > well, computer science should be MUCH more maths heavy than it is, and > software development should be taught as a trade.

Up until recently, the vast majority of Computer Science programs were under the Mathematics department. For most colleges even to this day they are still under the Electrical Engineering department.

</comment></comment></comment><comment><USER15> Interestingly enough, I think the misguided constant push to move CS degrees towards industry relevance more and more makes them more and more worthless -- we have academics going to industry conferences and asking what kind of developers would be preferable to churn out, students whining that they aren't 100% ready to drop in at a company when they graduate. So schools are pushing teaching how to write CRUD apps in java or "a class on the newest hottest mobile app development platform" or "version control" \-- all stuff that should be fairly easy to pick up in a day or on the job for someone who knows theory (version control), or has no place in a University (the rest) when they should really focus on the hard stuff, like CS theory (PL, theory of computation, distributed, compilers, algo, concurrency, mathematics), which is MUCH more difficult to learn outside of an academic environment, is universal, and translates to every language and development paradigm whether it's now or 50 years from now.

<comment><USER16> >students whining that they aren't 100% ready to drop in at a company when they graduate.

I think the problem is not with the students. The problem is that the companies expect you to be 100% ready to drop in and the only education you can put on your resume comes from a CS degree or previously having a job in the industry.

</comment></comment><comment><USER17> As someone that had a highly theoretical computer science education, worked in the industry for three years, then returned to academic CS for summer research, I have a few thoughts on this.

1\. A highly theoretical CS foundation is still very useful. One of the hardest classes I've ever taken in all my studies was an upper-level proof- based algorithms course. Nowadays I can glance at an algorithm and give you it's runtime complexity. This is actually an important skill because it influences how you construct your own methods and such. There were quite a few times at my old employer where I'd be like, "If we just switched this out to a hashmap, we'd have a constant time solution instead of this polynomial one," or something of the sort. Furthermore, that algorithms course changed how I thought about computing (and life) forever. Computational complexity theory is simply wonderous. I'm in med school now, and I will tell you, learning about human biology through the lens of a computer scientist is a truly enriching experience. Computation is everywhere!

2\. Your everyday programming jobs probably don't require that deep-cut CS coursework BUT there are plenty of specialized jobs that do. I can think of many sectors where you need to be fluent in something like graph theory and ways to traverse graphs, or statistical methods + machine learning. Not all jobs are full-stack dev jobs. Undergraduate CS is supposed to lay a solid foundation that you can build your career on. It's not vocational training. You have no idea where you'll end up! And honestly, I think there's plenty of hindsight bias going on here.

3\. Man, oh, man, people in academia suck at software engineering (and not to mention, product design). This isn't their fault! They haven't worked on a large codebase before. They don't understand git-flow or continuous integration or test-driven development. Their products need to get A's, not sell to a consumer. I will say, coming from the industry into back an academic environment it has been a bit of culture shock. Tools used, architecture, even ways of speaking _about_ the software are often completely outmoded.

All in all, I'd say both are very desirable. I'd recommend self-taught programmers take some classes on the more theoretical/mathy side of computer science. And I'd recommend that the academically-minded CS seniors FOR THE LOVE OF ALL THINGS GOOD take a year off and work in the industry before pursuing grad school.

<comment><USER18> I wonder if part of the problem is some universities watering down core, foundational, beautiful CS to try and make it 'practical'. They end up with a course labelled 'CS', but is actually a poorly implemented, behind-the times, irrelevant software engineering course that is the worst of both worlds...

<comment><USER17> Oh, I agree. My school tried very hard to NOT do this. I remember I was concerned about the lack of "practical" CS education, but alumni reassured me that whatever I needed to know after graduation would be picked up very easily. They were right.

</comment></comment></comment><comment><USER19> A degree in literature doesn't teach you how to be a best selling author or a get a job writing tv scripts. On the other hand becoming a good a programmer is much more difficult when you don't understand the fundamental inventions upon which everything else is built. You're limited by what you see in front of you in stack overflow answers and blog posts, with no insight into the why's, only the how's. Self taught programmers that progress beyond simple web pages and crud applications will undoubtedly come across a lot of computer science on their journey. Maybe you don't have to study Milton to be the next Stephen King, but your life will be a lot richer for having done so.

</comment><comment><USER20> "I hope to see the industry improve in this respect, but in the meantime I'm happy to exploit this imbalance as a competitive advantage."

I wonder how much of requiring a computer science degree is simply because the people hiring have computer science degrees. Seems like a self perpetuating insiders club.

<comment><USER21> Conversely I don't have a CS degree and I take a rather cynical view of candidates who have do. Perhaps I've created a self perpetuating outsiders club at my company. :)

In all seriousness, though, it's because the CS majors I've interviewed have (generally) been great at theory, crap at application. I once had a guy hold forth for 10 minutes about cardinality and then flop sweat when I asked him to explain the difference between "GROUP BY" and an "ORDER BY".

<comment><USER22> I am also not impressed by a lot of CS majors I interview. I often ask them to come up with a simple sort algorithm where performance doesn't matter or to reverse an array. A lot of them have problems with that. I am very tempted to try fizz-buzz...

</comment></comment></comment><comment><USER23> _" However, I also have to acknowledge that the scale and difficulty of the problems I've worked on is unusual compared to the vast majority of programmers"_

It's likely that the vast majority of programmers _wish_ they were working on these interesting and difficult problems, but instead they are writing another yet another ETL transform for an ERP system (not that there's no value in that, but that _was_ my job, and it _was_ repetitive and dull)

So even if a Computer Science degree isn't necessary for the vast majority of programming jobs, without that degree, you can only do one of those vast majority of programming jobs, leaving the really interesting problems to those with advanced degrees (or special domain knowledge)

<comment><USER24> I'll take domain knowledge over any degree every day of the week. In quite a few cases, we're still figuring out what the domains are or they're domains that academia doesn't care about.

More than that it's all about how much of a self-learner someone is. This industry is so new and changes so rapidly that if you aren't feeling that itch to understand some new aspect of programming you're going to be left behind. The _really_ good programmers I've seen have all been full-stack, not in frameworks, but in a complete understanding of how a system functions top to bottom.

Also quite a few CS people would do well to examine EE or a proper engineering track. I've always laughed at the title "Software Engineer". Very few are, most of what we do is just throwing something against a wall to see what sticks.

<comment><USER25> What domain does academia not care about?

</comment></comment></comment><comment><USER26> I did 5 years of heavy CS. Never graduated.

The most important things I got were: state machines, appreciation for high level math.

Oh and an intuitive understanding of modeling and translating fuzzy things into easily modelable things. That part is super important.

And an intuitive understanding of how tiny spec changes turn problems from computationally unsolvable to trivial.

But what have the Romans ever done for us?

</comment><comment><USER27> The value of a computer science degree does not lie in the number of direct applications you will encounter but rather in the school of thought and way of thinking it molds in you.

Often, people take for granted how differently you approach problem solving coming from a CS perspective. If anything, I have gained mostly in the ability to break down problems into the smallest pieces possible that work together thus reducing complexity and shaping the problem case. I can isolate core problems and through algorithm design implementation evaluate best solutions. I therefore wholeheartedly disagree with the notion that CS does not teach how to reduce complexity. It does.

Above all, I have rid my decisions of emotion and solely focus on the problem at hand. It's brutal, rough and inconsiderate at times, but it produces the desired results.

<comment><USER28> I agree. The problem is the intangibility and the difficulty to estimate the value (by an economic metric) of the degree.

Several careers have a more direct and tangible link degree-value, no one can be a cardiologist or a civil engineer without the degree.

I've a Software Engineering degree but I don't really know if it was worth it, I learned some valuable things but how can I say that I made a good choice with some degree of certainty?

</comment></comment><comment><USER29> Can we all agree that college is about getting a knowledge foundation, a nice degree that says you can get things done, and interpersonal relationships, and move on already?

</comment><comment><USER30> This topic comes up regularly. Yes, a CS education is not enough. You also need to learn programming. You also need to build systems and learn to think about how to build others even more. But for me it has been very useful almost daily and it can make the difference between being on solid ground vs. being out of your depth and sometimes not even knowing it.

</comment><comment><USER25> >I highly doubt most programmers need to know how to do formal proofs of algorithms, determine asymptotic complexity of algorithms, or even know that much about data structures.

Indeed, but I believe that having a solid foundation in theory is important. People have spent a lot of time coming up with ways to reason about common problems, and you don't need to reinvent the wheel.

Additionally, while many programmers can get by with skimping on theory, your mathematical knowledge tends to limit problems you can tackle. While you might be able to get away with making some CRUD application without applying any complicated math, you will have a hard time trying to write code to localize your robot with SLAM. Knowing theory only opens more doors to more interesting problems.

<comment><USER13> sure, but the maths involved with building a robot is not the same as doing user analytics etc. better to assume no knowledge when entering those fields, and learn on the job otherwise you learn a whole load of stuff you'll never need. you can't be a senior in a field you know nothing about, so these jobs will always have someone that knows that stuff and can pass on their knowledge.

i can say for fairly certain that 90% of the engineering maths i did at uni will not be applicable to me in my career, and there's plenty of maths that would be applicable that i wasn't taught. considering that was a 6mo unit (and ignoring the fact that it was easily the one that burned me out fastest), that's a lot of wasted time.

<comment><USER25> The engineering math curriculum has issues, yes, I agree. I thought a lot of topics were taught in the wrong order and their usefulness was often not made clear until much later. At this point, though, I think I've used techniques from pretty much every class (even ones I thought were irrelevant when I took them) I took.

But really, the engineering math curriculum has (or at least should have) three purposes. The first is to teach you logical reasoning and problem solving -- critical skills. The next is to provide you with a toolbox of techniques you can call upon to solve common problems in your field. Finally, the curriculum should provide you with the mathematical maturity to acquire the new mathematical tools that you need.

The last point directly relates to your second paragraph. I don't know very much about data analytics. If I (somehow) got hired into a big data role, the senior engineers will lack both the time and the desire to sit me down and give me the background on statistics, machine learning, etc. that I would need. However, because I have spent a lot of time studying other mathematical topics and have a background in linear algebra, probability, etc., they can point me at good sources and I can learn myself. If I came in just knowing single variable calculus from high school I would have a rough time.

</comment></comment></comment><comment><USER31> I have very mixed feelings about this article. For one thing, there are a couple of different kinds of CS programs. The basic division is, or used to be, whether it was more Math or Engineering heavy. In fact, some schools attach the program to a BS in the Math department and others in the engineering with more exposure to EE and Computer Engineering. Neither of these are necessarily helpful for becoming a programmer in today's market, but they do generate very different experiences.

The biggest benefit for me was the complete understanding and model you get of the entire computer. How it works, what theories it is based on, why things are the way they are (in terms of the Turing model, the way microprocessors work, etc).

I don't believe this knowledge is helpful from a software engineering point, and I may have been a better programmer if I had spent those years learning more about how to work as a team and how to solve real-world problems. However, I do feel that it has allowed me to switch between different fields of programming without completely being thrown for a loop. It has allowed me to understand the issues that crop up when something goes wrong on a much deeper level, or why problems crop up on one part of "the stack" that I may not have understood had I focused merely on learning how to program. These are personally valuable to me, whether or not they may have been more valuable to my career.

<comment><USER32> Despite those benefits you list, you still don't think that knowledge makes you a better software engineer?

I definitely think that understanding the lower levels helps me write better software, largely for the reasons you list.

<comment><USER31> I do think it makes you a better engineer, but I also think that the first year or two of working in a group with other developers taught me alot more about becoming a good software developer than alot of what I learned in college. You learn more about how computers work in Uni, but you learn more about how software development groups work by doing software development.

</comment></comment></comment><comment><USER33> Isn't the tricky bit that a computer science education is in fact an education in the science of computers (no surprises here), yet what most people study it for is an education in their usage?

Maybe what we actually need is a separate field, e.g. "practical computing". - which, I accept, would lend itself less well to University education which we have come to expect as a prerequisite for better paying jobs.

<comment><USER34> 'software engineering' is a degree program in itself in many universities, and it is a curriculum more focused on pragmatic, often even specifically business-focused, project delivery, from coding in a wide range of business- heavy languages to theories of software lifecycles and team management.

That said, anytime I've met one of the hard-working students who opted for a more math and theory heavy CS program instead of an SE program, that person has been able to software engineer and project manage circles around the people who specifically studied software engineering and project management.

</comment></comment><comment><USER35> As for testing a prospective programmer, what I consider an ideal test would be something like this:

1\. Pick the three most important lines out of this 100 lines of code.

2\. Explain why they're important to those who're not familiar with the problem at all.

3\. Rename its functions and variables to achieve maximum consistency to you.

4\. Optimize the code for maximum efficiency.

5\. Optimize the same code for maximum maintainability. (assuming the code will be used for 30 years)

<comment><USER36> You start with a subjective criteria? Ouch. It reminds me of the time I had to do some work for a factory... _every_ department was telling me how theirs was the most important work - with arguments.

I can make an argument for even a "write to log" line as being extremely important when something goes wrong; I have no idea how I would pick three lines out of a hundred.

<comment><USER25> If I were giving the interview (not OP), I wouldn't care which lines you picked, just how you justified it.

</comment></comment></comment><comment><USER37> "Whether someone can or cannot solve some cute algorithm problem in a high- pressure situation tells you nothing about that person's ability to write solid, clean, well-structured programs in normal working conditions."

It sure tells SOMETHING.Ofcourse there are better ways to evaluate a person as a programmer but I hate it when people claim something without basis.

</comment><comment><USER38> Annoyingly, there isn't much in the way of change on the horizon for this problem, people seem to like things the way they are.

The problem is that there is no good formalized educational standard for software development training. So instead Computer Science gets shoehorned in as a substitute. This leads both to sub-standard Computer Science degree programs from a pure CS perspective (because they are primarily just trade school educations in disguise) which are even worse as regards to training for Software Engineering. CS is very algorithm and data structure focused, which is good in moderation for dev training, but they usually delve into realms that are not useful even in the "well it's good to have a broad knowledge base" sense. Moreover, CS doesn't typically touch at all on the many practical skills, and their fundamentals, needed to be a good dev, ranging from development cycles and styles to QA and testing fundamentals to source control use and management to proper composition and componentization of software to refactoring and dealing with legacy code to deployment strategies and techniques and then on to familiarity with actual operational systems related to all of these things. Each of those topics has sufficient depth to be an entire course or series of courses, yet they are frequently only barely touched on in CS programs, and sometimes they are ignored entirely.

I've been in hiring loops numerous times, and one of the quickest things I learned about hiring in tech is that a CS degree on a resume means basically nothing, there is almost no correlation between having studied CS in college and being able to code at even the most basic level. Unfortunately, I don't foresee much change in the future on this problem. CS is still a prestige degree (a 4-year degree in one of the coveted STEM fields) and I have a hard time seeing a legitimate Software Development education fitting in the mold of either an arts or sciences degree program at a liberal arts college.

<comment><USER18> One interpretation of CS (that I personally subscribe to) is as a subject about the theoretical and mathematical understanding of process and abstraction. Computers and software are just the medium. Taken that way, it's an important subject that should be supported and protected. But but students and employers seem to be expecting CS courses to be an industry training program about specific technologies and practical programming. This leads to a confused mess where nobody is speaking the same language, and limited satisfaction for all parties.

</comment></comment><comment><USER39> I think the author has accidentally replaced the word "useful" with "being a good programmer".

Sure, most computer scientists become programmers, and CS degrees don't necessarily translate into programming skills. However, getting a "computer science" degree is not the same as getting a "programming" degree and I don't think that its "usefulness" should be determined by the skill someone has as a programmer after getting the degree.

The reason getting a CS degree does not make someone a good programmer is simple: * A large percentage of the courses you will take will be general education (about 20% in my colleges case) * Another large chunk will be in mathematics (say another 20%) * One more sizable chunk will be "lost" to CS theory and "row-based" information (remember writing round-robin schedules by hand, or verbally explaining parts of TCP in class)?

Leaving us with maybe 40% of classes having some sort of programming lab. And if your like me you'll specialize in machine learning, will will allow for even less exposure to things like the gang of 4 patterns.

However, the flexibility of a CS education is much much greater than if I had just been programming for those 4 years. If I decide I'm more interested in a career in IT security or data science, my courses will have useful. I think that someone who had instead just been programming Java and Rails web apps for 4 years (like I do now) would have a much harder time transitioning into those (potentially higher paying) fields as the market evolves.

Also it's important not to discredit general education. Being a strong writer, speaker will always help you. Knowing some history and geography will keep you from sounding like an idiot when you talk to people from other countries.

A college education is not the same thing as a trade school and shouldn't be compared to one.

</comment><comment><USER40> Ater working with Storm and reading Nathan Marz's Master thesis, I got to say, he really is one hella of a developer. He was also very responsive on the questions I asked him on Storm's forum. I take Nathan's advice at its face value cause he is the most well-rounded computer scientist you can ever find.

<comment><USER41> What's his thesis about? I can't find it.

</comment></comment><comment><USER42> If any young person is reading this I would caution them not to take such advises blindly. A "good computer science" education beats "no formal education" any day for an average person for the simple reasons.

1\. Success in tech industry depends as much on your peers as much it would depend on your IQ. Knowing bright, well established people in tech industry is invaluable. Such connections are often built when you go to schools like Stanford, MIT etc. or even a reasonably good college.

2\. Having a good college name on your resume is going to open many doors for you. You will realize that as a MIT grad when you talk to investors about cutting edge research in a specific field would be far more credible.

3\. CS degree will not teach you a lot about how to code, build great products. Not more than a passionate coder writing code in his basement. I admit that.

</comment><comment><USER6> > The vast majority of what a programmer does, forming good abstractions and > avoiding complexity, is almost completely untouched by computer science > curriculums.

I feel like in the course of working on large projects such as a parsing, lexing, compiling program, a student inevitably touches on these topics. And certainly when working with template code (such as in an Intro to CS class), they can see how nicely it was structured for them.

However, I agree with the sentiment that it seems like these topics are not directly addressed by most curriculums. At the same time, from my experience it seems like these ideas are applied very differently in different contexts (such as different platforms and languages), so a college class would be more abstract in teaching them. Perhaps it would be effective if they did some examples while teaching these ideas.

</comment><comment><USER43> Some very valid points made in this post. Is CS valuable? I believe it is. I've witnessed the difference first hand in our startup but then again it's "hard tech."

The part I question is, the percentage of programmers that will work at a "hard tech" company is so small that, unless the company you're working at is a hard tech company, then there is no relevance to onboarding someone with CS skills. It does not diversify the team. Diversification in a team is of high value. Most engineers want to hire others engineers so that they have something to talk about. But that's a comfort thing.

Long story short, soft tech companies should only have one or two hard tech engineers on their team especially in the early days and only test at the skill level required when onboarding.

</comment><comment><USER31> Another thing that bothered me about the article, although it did make some good points, is that it just assumes that the choice is either four years of employment as a programmer at some level or four years of uni. If you're trying to get a job as a developer as an 18-year-old with a fresh H.S. diploma and maybe some tech school credits, your competition isn't _other_ H.S. diploma carrying developers, it's a 22 year old graduate with a CS degree.

If you live somewhere that you can get a job in the field directly out of High School, that's all well and good, but it's alot harder for a variety of reasons than someone who has finished a degree. Which is one reason why so many people go that route.

<comment><USER44> >If you live somewhere that you can get a job in the field directly out of High School, that's all well and good, but it's alot harder for a variety of reasons than someone who has finished a degree. Which is one reason why so many people go that route.

that is key; there is a strong argument in favor of jumping right to a programming job if you have the opportunity... it's what I did. but I got lucky on a bunch of fronts. (parents in the industry, timing, etc) - I mean, if you have a programming job _right there_ it's hard to argue that you should go to school instead. And in my case, the job was available in large part due to timing; it would have been way harder to get a job in 2001 than it was in 1997, even if I had gotten a degree meanwhile.

I guess the other thing to consider is how hard it is for you to go to school later. I mean, if the parents are willing to foot the bill for your education now and won't be willing a few years from now? that's a pretty big thing. I'm slowly working on getting myself into college now, and it's harder in some ways, because the typical application process was not designed for me, but easier in others, because things like money aren't a huge problem anymore, and I am so much more self-disciplined.

I'm too early in the process to tell you if it's easier or not (I've got either 9 credits, or 0, depending on how you count) - but it's certainly different. It is... difficult to pay people to

But, in general, if you have the opportunity to get a coding job right out of high school, and nobody is paying for your college, take the job. If someone is paying for your college and you don't have the opportunity to get a coding job out of high school, go to college. The optimal course of action gets foggy if you have both opportunities or neither.

</comment></comment><comment><USER45> I didn't see university as a occupational training facility, and I was torn between majoring in CS or history.

What I got out of my CS program was... discovering that figuring out how systems and things worked was interesting to me. I also found the prospect of something closer to engineering was a better path to me than academia, teaching, law or some other path.

In terms of the relevance of specific coursework, I can't say that I spend a lot of time with advanced math or some of the other topics, but I learned my way around a UNIX system, got my first taste of large scale networking, and a bunch of other things.

What I learned most about in school was me.

</comment><comment><USER46> Doing well in a STEM degree like CS or Math is valuable for two reasons:

(1) it usually, but not always, implies that the candidate has at least some coding knowledge; and,

(2) [most important] it is a good proxy for logical/mathematical intelligence.

As long as IQ tests for employment remain a legal grey area, employers will continue using STEM degrees as a filter.

The claim that (2) is the most important is anecdotal, being based on my own experience: I have a degree in mathematics, which doesn't really imply (1) to nearly the same extent as CS, and I have never felt it made it more difficult to get job interviews.

<comment><USER47> That sounds like a round-about way to train, prepare someone for a profession. The CS program is an artifact of how slow universities are to adapt to the needs of a growing industry. I would much rather see software development slip into an apprenticeship program rather than rigged up to a program that was never intended to train engineers.

<comment><USER46> Well, the CS program at most "normal" (non-elite) schools is already pretty practical and engineering-focused, AFAICT.

</comment></comment></comment><comment><USER48> It's always fun being on a project and having the CTO say he's disappointed in you because you cannot 'back-sort a double linked list.'

Fun times trying to distract them from their own arrogance.

</comment><comment><USER49> This analogy is really good:

> Whether someone can or cannot solve some cute algorithm problem in a high- > pressure situation tells you nothing about that person's ability to write > solid, clean, well-structured programs in normal working conditions. This > practice is akin to hiring pilots based on how they do on an aeronautical > engineering exam. That knowledge is relevant and useful but tells you little > about the skill that person has for the job.

There's a lot of talk and debate about whiteboard interviews and this, for me, succinctly sums it up

<comment><USER50> Is the analogy really that good? A pilot will never be called upon to engineer a plane. Lots of good "hackers" will get stuck if they have to design an algorithm.

</comment></comment><comment><USER51> I value my CS degree, but I also agree with the author. I don't think recruiters should ask for a CS degree, or focus on applicants having a formal CS education. There needs to be an simultaneous shift in the industry and in academia that allows for software engineering and computer science to be distinct diciplines with distinct goals: SE gets you into the industry, CS gets you into research. Most other sciences have their envineering partners, and technology should be no different.

</comment><comment><USER52> _The vast majority of what a programmer does, forming good abstractions and avoiding complexity, is almost completely untouched by computer science curriculums._

It's also almost completely ignored in the typical programming job interview. Which is why when I interview people now I'm most interested in looking at code they've already written, and asking them to break down an application description into a set of data & interface abstractions.

<comment><USER53> How do you look at code written if it's all confidential and owned by their previous employer?

<comment><USER52> If the candidate can't produce any code samples at all then I give them an example app spec to decompose into abstractions.

</comment></comment></comment><comment><USER54> The students you really want working for you are those who went through the rigor of a theoretical CS curriculum while also indulging a more practical skill set. Such a skill set can be honed at hackathons, for example.

It mustn't be forgotten that a theoretical curriculum teaches discipline to learn just about anything--if you can learn complexity theory and algorithmic proofs, chances are you can learn to create a CRUD API.

</comment><comment><USER55> I was just thinking about this today, after I ran out of time in an online interview where I had to write code to correct the formatting of various strings (add spaces, capitalize etc). I was given 20 minutes.

I thought, I would have nailed this problem when I was looking for my first developer role, when I knew precisely how python regexps worked. Now of course I just look them up when I need them, which is never.

</comment><comment><USER56> Seems silly to pay thousands of dollars to read through some books at a slow pace.

My employer wants to pay me to get a bachelors in ee or cs (have half of one, but dropped out when it was clear I couldn't afford to finish), followed by a masters/phd, but it's only tangentially about the 'education'. It's all about networking and being able to wave around credentials.

</comment><comment><USER57> CS education is not useless, but less used. And it is also used-less by the same people who teach it. There are exceptions - but that number is way too small than it should be.

If someone wants to learn coding or programming - screw the CS degree, there are better options. I know CS degree holders who can't code more than a few lines or can't debug a large program. And there are better programmers who don't have a CS degree. YouTube will teach better programming than a CS degree class.

Apart from programming, if one "also" wants to learn the mathematical aspect of CS and want to work on core-stuff, go for a CS degree. And those skills do not come easy from some tutorials - a academic rigor is probably the best way to earn it. But if you use the O-notation at some jobs - you could become an outcast in the team.

When I got into a top college for a CS degree, I had high hopes from it. For the first 1.5 years, I wanted to quit, quit and just quit. It was hopeless - they were teaching few subjects that I was way better at. But for some reason they would not allow me to just give exams and get promoted. I already knew programming, patterns, electronics and even dealt with basic robotics before I joined college. For one example - when they started teaching operating- systems, my expectation was that they will at least give a hands-on on writing a pretty basic OS. No - they were just doing theories. Ultimately, I ended up writing a pretty simple version of a custom OS without any mentoring (and used Google) - because the professors had never even written a boot-loader to start with. I also ended up helping weaker students get upto the mark. In one of the semester assignment evaluations, I was told by a senior professor " you copied programs from the internet - how come they are so well written". I lost trust in them.

I did learn some stuff in the later years and came to peace. While I knew programming, I did not have a strong math background - stuff like probabilities, numerical methods, theoretical computer science and bit of advanced algorithms were the things I learnt and explored further. The most important thing was getting introduced to AI which turned out to be a huge area of interest for me.

However, all of that bad experience has turned me sour towards academia in general and I do not recommend spending a lot of money and more-important-time learning "used-less" things - unless you are expecting more than programming in CS. And when it comes to CS, the learning never stops.

</comment><comment><USER58> In my years working in the computing field, I have found that individuals with a Computer Science (or related) degree to be much more adaptable to emerging technologies. Individuals without a degree have proved to be excellent at yesterday's problems, but they have a difficult time moving past their initial expertise.

</comment><comment><USER59> So basically the guy is saying there IS value, but limited. And in a fairly neutral stance about a rather sensitive topic, he gets to advertise his book as well.I guess with degree from Stanford, he may have written a program to generate that article with a target sentiment and then insert the plug ?

</comment><comment><USER60> If you are not a DBA and did not get a BSCS, ask yourself this question - <USER2> people speak of relational databases - what is a relation? Then look up the answer, which is rather simple (don't reply with it here, unless you rot13 it or something). Maybe ask engineers with a few years experience. Were they right?

Where does the concept of regular expressions come from? Can you explain why you can't use regular expressions as an all-purpose HTML parser?

I took 1 1/2 semesters on critical sections, race conditions and such. I deal with these problems all the time, and have seen much code where people either never learned about it, or didn't learn it properly.

I had the idea once to hash a short list of small numbers as a Goedel number. Looking around I see the idea was not original (in other places I use triangular numbers etc.) I would never have known about those without CS.

Yes you have to keep learning more. It is a good foundation to start from though.

</comment><comment><USER61> Ive heard the value of comp science being exposed to various algorithms but im surprised that knowlege isnt an advantageous starting point? I think in long run it wouldnt matter since if you dont have exposure you will eventually pick up

</comment><comment><USER62> > and avoiding complexity

God it's refreshing to see someone actually put that as one of the primary, principal activities of software development.

Figuring out how to do a hard thing in a simple way is not simple, it's actually really hard!</comment>


Please Review my Startup: Synnk.com - <AUTHOR>

This is actually somewhere in between a startup and a side project.  It's for those times you want to get together, but aren't sure when, where, or even who will be there.  The group can propose options and vote on them.
I posted it a while back, but have done a total redesign and added some important improvements since then.
Please try it out!  Thanks for any advice or feedback. <comment><USER2> Very cool idea... I have my critical hat on though, so don't take offense to any of this and please weigh it with the other feedback you get -- this is just my own personal take on the service.

\-- As soon as I read "You and your friends can propose places, times, discuss them, and vote on them." I thought "well that isn't going to work" or at the least "I wouldn't use that" because...

* The few times I've had to plan group events (3 or more people) unless I brought choices to the table, no more than 3 typically, and times... the planning died immediately. No one ever provides feedback to the capacity you'd like them to when planning an event, the most time-slice you can get out of most folks is to click a "yes" or "no" button -- unless you have unusually patient friends... mine are all in tech and we all have A.D.D.

* "Synnk keeps track of it..." I love that you don't require a login. I created an event and got the email and clicked it and was looking at my event. YAY

* Right now I might plan something like Synnk is targeting by just SMS'ing my friends. Trying and figure out how to offer something more convenient or compelling than this... cause SMS is so damn simple and personal that more times than not, you get a reply... email's sit in people's inboxes and die. Just a thought.

ETC NOTES * Great name! * If this takes off, support for SMS is a must. * You might define like 2 or 3 simple markup-esque codes that can be used in email or SMS messages that the system parses out into locations and times easily and quickly so when I send that _original_ email, it's all in there for me... something like parsing "l:" as a location and "t:" as an optional time slot. This is pie in the sky stuff, just listing it here.

So in summary, I think if you focus on the participant feedback being the hardest thing to get, and structure some changes to the service around making all that part of it easier, the service will be easier and more attractive to use for simple quick stuff.

</comment><comment><AUTHOR> Clickable: <http://synnk.com>

</comment><comment><USER3> It seems kind of odd that I don't have to sign up for anything to use the site, but I do have to sign up for something to send feedback.</comment>


Tired of Dirty Dishes and 'Hacker Houses,' Millennials Revamp Communal Living - <AUTHOR> https://www.politico.com/magazine/story/2018/08/23/co-living-millennials-san-jose-what-works-219378 <comment><USER2> I would have liked to know more about their acceptance process.

As someone who has written about living with roommates. I had one girl who looks normal wearing a long dress for the interview. Three days later we learn she's a convicted criminal on house arrest for kidnapping. She screams on the phone, cussing, for 12 hours in her room. Late at night watching movies on loud speakers and cooking at 3 am in the morning.

How does HubHaus fix this? Is there a voting system like the island where the most awful roommate is voted out each month? What are the consequences when a roommate works until 4 am and comes home and wakes everyone up 2 hours before their alarm for work?

</comment><comment><USER2> Also, I assume this is for single people since the documentary I saw about HubHaus was very adamant about having zero privacy which means no love making for married couples.</comment>


Sample UI test automation framework design with Selenium Grid and Docker - <AUTHOR> https://weareadaptive.com/2018/03/29/sample-ui-test-automation-framework-design-selenium-grid-docker/ <comment><AUTHOR> In today's software development life cycle, test automation frameworks are an essential part of the testing process. The ability to integrate within the build-test-deploy pipeline is mandatory and running the tests on a developer's machine to confirm a failure or extend the test suite, should be done with minimum configuration. So, how do you assure the quality of complex distributed systems? Which are the key elements to speed up testing that Adaptive's QA experts use?</comment>


MIT OCW:The Society of Mind (Graduate Course by Minsky) - <AUTHOR> http://ocw.mit.edu/OcwWeb/Electrical-Engineering-and-Computer-Science/6-868JSpring-2007/CourseHome/index.htm

<comment><USER2> Related: [http://web.media.mit.edu/~minsky/papers/ComputersCantThink.t...](http://web.media.mit.edu/~minsky/papers/ComputersCantThink.txt)

</comment><comment><USER3> Society of the mind was one of the best books I read when i read some years ago!</comment>


Coffee Meets Bagel Meets Me – Statistical analysis of online dating - <AUTHOR> https://medium.com/@mydatablog/coffee-meets-bagel-meets-ginny-ea33fd0780ae <comment><USER2> > In 2014, I went on 45 first dates with guys I met on Coffee Meets Bagel or > Hinge (but mostly CMB). I started using Hinge around October 2014, and I > added it to this analysis when I decided I needed more conversation data. > This covers dates that happened between January 1st 2014 and December 30th > 2014. I also went on a bunch of second dates, a handful of third dates, a > smattering of fourth dates, and some past that.

> The purpose of this analysis is to understand how to predict whether or not > I'll be compatible with someone based on his profile and the messages that > he sends.

One of the best online dating studies was published in Psychological Science in the Public Interest[1].

Its basic conclusion: online dating is great because it expands one's access to potential partners but the algorithms don't really work and the profile- based structure creates an "assessment mindset" that leads individuals to be more picky, judgmental and non-committal. When there's a bunch of new potential matches available every day, you don't have to accept the fact that _nobody_ is perfect. The nice guy or gal you had dinner with last night might pale in comparison to the Mr. or Ms. Perfect who could be in today's batch.

Ironically, the OP's experience demonstrates this dynamic more than it demonstrates merit to her own analysis. After 45 first dates, and what sounds like a reasonable number of second, third, fourth and _n_ dates beyond that, the OP seems content to continue what she calls an "active dating life."

[1] [http://www.psychologicalscience.org/pdf/PSPI- online_dating-p...](http://www.psychologicalscience.org/pdf/PSPI- online_dating-proof.pdf)

<comment><USER3> The end goal of dating isn't to find a life long partner for everyone. Some people date to that end - great. Some other people are fine dating "casually", without the prospect of a longterm (possibly lifelong) relationship as the goal. In other words, they might enjoy the company of the nice guy/gal from dinner last night for a few weeks, and then move on to a next person whenever they feel like it. That's also fine (although it might not be fine ~for you~).

Also the very concept of "dating" is very much tied to American culture, and one's perception of it (and its goals/effectiveness) will vary greatly depending on culture/religion/upbringing/etc. There's a version of you in a parallel universe brought up in a culture where arranged marriages are the norm, and you'd be posting in this thread about how ridiculous it is that one should date at all - your parents should pick your partner for you!

(I've been in a monogamous relationship for the past ~3 years)

<comment><USER2> Your point is completely valid, however, the challenge is expectations/intentions. It's one thing if both parties are seeking the same thing; it's another if they aren't. I would venture a guess that many times there are misalignments. In some cases, these may be conscious (somebody is looking for casual dating on a marriage-oriented site) while in others, they're unconscious (individuals _believe_ they're looking for a serious relationship when in reality they aren't ready for one).

Using the author of this post as an example, I wonder how well aligned her expectations and intentions were with those of her 45 first dates. Note that in one part of her post, the author refers to "meet[ing] someone" while in another part she refers to leading an "active dating life." Although you can obviously expect to meet multiple people before you meet someone with whom you want to start a monogamous relationship, these might be two different pursuits.

The questions around expectations/intentions are even more intriguing in light of the fact that the author says almost all of her dates looked like their photos and that she didn't have "any especially bad CMB/Hinge dates."

</comment></comment></comment><comment><USER4> "Also true story I generated this data and actually wrote a for-loop that would print out the top ten most highly-correlated words from 10 to 1 and pause in between each word to build suspense (for me alone at my computer)."

Adorable.

I am curious why she would use word length and exclamation/emoji/question mark ratios but not check for spelling or punctuation? Surely they are more indicative of someone's level of education and reading habits.

<comment><USER5> Hey, I wrote the article. Thanks for reading it. This is only guys I went on dates with -- to be totally honest, I don't usually go out with people who make lots of spelling/grammar errors.

<comment><USER6> I once got a date because I sent a woman a message with the improper usage of "their" in place of "there", then followed up with a second message pointing out the mistake and my shame in having made it.

<comment><USER5> That was very accommodating of her.

<comment><USER7> I am guessing this is being said in a joking manner.

</comment></comment></comment></comment></comment><comment><USER8> > _I hope the variable names are self-explanatory. Any variable with a star > next to it is statistically significant, which basically means it can be > used to predict scores /ratings._

For a variety of reasons (e.g., multi-collinearity), following this procedure would potentially have you tossing the most important contributors to your model. I would use a different mechanism to evaluate the contributors to your model.

A more classical way to tell if something contributes to your model is by evaluating a model with that value compared with the model without it. How do the AIC (or BIC, or LR, or other metric that you like) of the N plausible models compare?

As an aside, the article's approach to evaluating the "significance" of predictors doesn't account for multiple testing. You have ~10 variables in your model, and your best P value is 0.01, which is essentially 0.1 after accounting for multiple testing (Bonferroni), which is not significant classically.

<comment><USER9> Two additional notes:

1) R includes the F-test output that accounts for multiple variables in the regression: in this case, P = 0.089, which is a problem.

2) For variable/model selection, R's step() function is easy to use and tests using AIC too: [https://stat.ethz.ch/R-manual/R-devel/library/stats/html/ste...](https://stat.ethz.ch/R-manual/R-devel/library/stats/html/step.html)

</comment></comment><comment><USER10> [http://jezebel.com/5902718/creepy-finance-guy-with- spreadshe...](http://jezebel.com/5902718/creepy-finance-guy-with-spreadsheet- of-matchcom-prospects-says-he-was-just-trying-to-be-organized)

if this guy's _only_ creepy, what does it make the person who tracks punctuation marks, runs linear regressions, and trains learning algorithm using data collected on dates?

<comment><USER11> Assuming this is an honest question, the guy is creepy because men preying on women is _much more common_ than the other way around.

<comment><USER10> how exactly is going on dates preying?

<comment><USER12> Nobody's saying that this guy is preying. But the fact that other guys prey makes unusual behavior like this more suspect. Women have to be more careful than guys, since they are more likely to be abused. So naturally, they are more sensitive to unusual behavior. You and I see this spreadsheet and think "this dude's just awkward, but probably harmless." But some women might think "serial killer alert." This is partly because of the media (watch enough dateline and you'll think every man's a kidnapper). But partly because of reality - some men do sick shit, and women are scared. My wife has some stories about past dates she's been on that would repulse you.

<comment><USER10> uh, women also do sick shit to men. it's 2015, being a twisted, terrible human being is now an equal opportunity phenomenon.

<comment><USER11> It's almost like you didn't even read the thread you're replying to. One of these is _much_ more common than the other.

</comment></comment></comment></comment></comment></comment><comment><USER13> It's a cute read but there is really no data analysis. Her conclusion is "I still rather just look at profile pictures."

<comment><USER14> > It's a cute read

That's all you needed.

</comment></comment><comment><USER15> something profoundly depressing about the idea of 45 first dates in a year.

profoundly depressing for both the guy (the crap odds that come from being 1-out-of-45) and for the girl (can't be happy with any one from out of 45)

<comment><USER16> Hey man not at all, meeting people is great, it's fun. Dating is like life: people worry so much about what you achieve in the end that they forget to enjoy the ride.

Besides, it's the communication age, isn't it? Date, my children!

nice sorry hiking house outdoors harvard google drink math cornell

Edit: PS: you're 1 out of 45 either way, but if you never date, that's when your odds are _real_ crap. Dating only a small subset per year, just because you happened to meet; or getting the girl to stick with you because she just happened not to have met that guy who's perfect for her; that sounds much more depressing to me. Unless you believe in fate?

</comment></comment><comment><USER17> @ginny2357 I am curious what other statistical factors you used or kept that weren't used in the analysis. A friend who was a former PM at match said that height, income, race, and occupation were the four most important factors (in that order) for women to select men.

If you're ever in Miami, let's discuss this over a drink.

<comment><USER2> If your friend is correct, you should probably post your height, income, race and occupation here so that she can take your offer for drinks under serious consideration. Your proper use of "you're" and reference to "statistical factors" isn't enough to stand out on HN.

</comment></comment><comment><USER18> I could rationalize the message ratio as sort of a self-fulfilling prophecy. If she sent many messages, she was probably already interested in him for some reason, and so would be more likely to rate him highly at the end.

As a methodological point, I would also have taken the log of all the ratios, especially when doing a linear regression. A ratio of .01 looks like .00001 to a linear regression, but they are quite different. Of course, if the dynamic range is relatively small (probably within 2 fold either direction) maybe it wouldn't matter too much.

</comment><comment><USER19> I don't know what's more worrying, - the turn everything into data as an industry, or how happy individuals apparently are to apply it to themselves.

Take this with a grain of salt. The statistics of course (well on a larger scale than this article could take aren't wrong) but that an individual is ready primarily to evaluate their own choices in terms of them is rather scary.

<comment><USER20> Did you read her conclusion? It's not all that serious, just a cute bit of fun. Nothing wrong with that. Besides, everything _is_ data already; regular boring introspection is just "data mining" with terrible sample sizes because of memory, and bad statistics because of biases. ;)

<comment><USER19> I wasn't specifically referring to her analysis, indeed as you point out with those sample sizes and the number of potential conflating factors it's unlikely this data is statistically worth anything -

I was commenting more on the general approach, of evaluating ones actions or choices within the context of a statistical framework.

</comment></comment></comment><comment><USER21> Given that the rest of the posts on the blog were of the rough form "using marketing channel X to meet people", this probably leads into the next article on writing technical posts to catch the eye of an interesting crowd... "Should you make Hacker News your new dating app?"

</comment><comment><USER22> I would love to throw some sentiment analysis at this and see what could be conjured up. Maybe nothing because the sentiments would likely all be very similar and it would be hard to fine tune it enough, but it still might be an interesting exercise regardless.

</comment><comment><USER23> The model isnt that great. I'd kill some of those variables and run it again to find something more significant and with fewer confounding factors that drive down the explanatory power (R2)

</comment><comment><USER24> Please somebody try to make a coffee-enabled bagel.

If you know a bagel maker, and they have not tried adding extra-fine ground coffee to their bagel dough, might you suggest is please?

<comment><USER25> Agreed! For that matter, is anyone in the coffee-plus-oatmeal market yet? I mix the two together on occasion, but haven't experimented with it thoroughly yet.

<comment><USER26> Don't suppose you're Australian?

My goto breakfast of champions is the Carmans crunchy clusters[1] (honey roasted nut), using a Dare double espresso as the milk.[2]

Soooo gooood

1 [http://www.carmanskitchen.com.au/our- products/clusters#Honey...](http://www.carmanskitchen.com.au/our- products/clusters#Honey-Roasted-Nut-Crunchy-Clusters)

2 [http://www.dareicedcoffee.com.au/Product](http://www.dareicedcoffee.com.au/Product)

<comment><USER25> Different continent, but thanks for the recommendation. :)</comment></comment></comment></comment>


Show HN: Ablator – Switch features on or A/B test them inside your app - <AUTHOR> http://ablator.io <comment><USER2> You might want to get this added to [http://featureflags.io/](http://featureflags.io/)

Good luck. It's good to see some more competition in this space.

<comment><AUTHOR> At a cursory glance, [http://featureflags.io/](http://featureflags.io/) seems to only be a marketing page for LaunchDarkly. I don't see any other server advertised there, and it is obviously built by them. I didn't search that long, but I didn't find a submission link either. So ¯\\_(ツ~)_/¯

</comment></comment><comment><USER3> Oy vey.

What is the problem that you solve that would justify adding a dependency on an external service that shims itself between us and our precious users?

Rolling out features to subsets of users in a controlled fashion... it's just a such damn trivial thing to do.

<comment><USER2> It's only trivial when your needs are trivial. See [https://launchdarkly.com/buildbuy.html](https://launchdarkly.com/buildbuy.html)

At scale, a hosted solution might be justified.

<comment><USER4> Many (most?) people are not at that kind of scale, and LD is only at scale as the sum of 1000s of small sites + a few big ones.

After using LD for a year I found it expensive, slow, broken. They were cool and gave me a large credit.

Now I use a self-hosted "microservice" which works at our scale (100s of users).

Feature Flags are only checked on sign in here, so the load on our service is very low.

But is in go, which is "fast" and web-scale, right?

<comment><USER5> Wow, $79-300 a month is expensive for a feature like that. Not sure who they're targeting at a price point like that - many who can cough up a budget like that for a small point solution are going to have the capacity to build their own.

<comment><USER6> split.io is several times that.

IDK about this product, but split.io has more features and better UI than you could get from a handful of engineers working part-time.

</comment></comment></comment></comment></comment><comment><USER7> Congrats on shipping.

I think your copy could use some improvement. Casual professional is a hard tone to do well.

Also, this should be a single call for a user where you give me all of the users feature flags. Then I can put it in a session cache and be done with it. These things by design never change for a given user.

This is not a technically difficult thing to do (until you reach scale) so I think you will get more return from investing in marketing than development.

Gl.

<comment><AUTHOR> Thank you for the encouraging words :)

Do you have specific improvement suggestions for copy, or should I just get some people who are good with this and ask them for help?

The all users thing is a nice idea. I'll have to think a bit about how it implement this.

<comment><USER8> Two things. In response to your request for suggestions, maybe a little more explanation about how it works. For example, does my code have to manage the dispatch to the "flavor"? Or is this in the client-side ablator libraries.

Second, this is a feature question or suggestion. Does the client side library track exceptions or have a way to report errors in a particular "flavor"? Or how does one decide to increase the roll out coverage of a new feature?

<comment><AUTHOR> Thanks, I'll clear that up in the copy! But in short, the ablator server decides which user gets whic flavor. Right now, this happens randomly, but I'm thinking of adding more rules in the future.

Exception tracking is not built in, but you could use something like sentry, and send the flavor value as metadata.

</comment></comment></comment></comment><comment><AUTHOR> Thanks for all your kind words and improvement suggestions! I've started cataloguing them into [tickets on github]([https://github.com/ablator/ablator/issues](https://github.com/ablator/ablator/issues)). Feel free to add more or extend existing ones! :)

</comment><comment><USER9> It looks interesting, and might be something I introduce to my team.

Is it possible to define cohorts of users, and then expose features to that group? I work on a SaaS app used by businesses, so it'd be very handy to use this tool when a customer is beta testing a new feature.

<comment><AUTHOR> That's a cool idea. Any ideas how you'd want to distinguish between cohorts?

<comment><USER9> If I could set arbitrary key/value on both users and features, that should be enough to make it work.

</comment></comment></comment><comment><USER10> Is it easy to make something self hostable? It sounds nice, but like it'd slow you down significantly.

Now you have to worry about versioning, changelogs??? Worth it?

<comment><AUTHOR> This is actually self hostable. Just get the newest source from github and build yourself a docker container :)

Or you can get it hosted if you don't want to worry about changelogs and the like.</comment></comment>


The Future of Science - <AUTHOR> http://michaelnielsen.org/blog/?p=448 <comment><USER2> science is still mainly about the money. don't blame scientists, blame the people writing the checks.</comment>


Why We Should Ditch React [video] - <AUTHOR> https://www.youtube.com/watch?v=iRo18pUs61Q <comment><USER2> This is a long-winded rant that seems to boil down to advocating for avoiding frameworks altogether. Not worth the watch.

TLDW: "the whole point behind this video, guys, is maybe we should ditch React because all of these changes are because of short-sighted architecture, and maybe we all shouldn't just be these herd animals that are constantly taking and following the herd from one section of the field to the other you know we keep going around in circles and getting nowhere."

<comment><USER3> Sounds like he's never had to develop a complex stateful application. In the comments he suggests we can get away with just using "raw js and a decent MVC framework", which becomes unmaintainable very quickly.

<comment><USER4> There is no such thing that raw/vanilla js is unmaintable, what is unmaintainable is stuff that breaks regulary and vanilla/raw js never(almost?) breaks.

<comment><USER3> Er, what? The language is not what is breaking here, your application is. If you try to build a complex stateful application with no frameworks, you will more than likely create an unmaintainable buggy mess. You won't be able to reliably add new features without breaking something else.

</comment></comment></comment></comment><comment><USER5> Summary: this guy doesn't like hooks because he doesn't like learning new stuff and he wants to throw out React because it changed a little bit. Doesn't mention the benefits of framework changes or rationale behind them.

Definitely garbage YouTube click bait here. Don't bother.

<comment><USER6> He does have a point that churn/the new hotness is a real issue, and the latest hotness in JS library/framework have a very short shelf-life. On the other hand, projects like Babel or Polymer, that _want_ to be obsolete at some point, but will require minimal re-writing when that happens are excellent and future-proof.

<comment><USER7> There is a far less framework churn now than there was 10 years ago. React, Angular, and Vue have all been around for a long time now relative to previous JS frameworks. React makes a lot of changes but they are, on average, improvements. Not all of them are the best decisions and some are temporary band aids to support new features, but the constant iteration in response to changing expectations for web is one of it's strengths IMO.

<comment><USER6> Angular 1 or 2? Cause the latter seems to be 3 years old. Okay, facile argument, the others are 5-6 years old from a quick search.

> React makes a lot of changes [...] the constant iteration in response to > changing expectations for web

maybe it's ironic we're having that discussion on HN, and i'm struggling to remember sites that have gotten better lately, not worse. then again, that's probably because of the bias to remember negative experiences

</comment></comment></comment></comment><comment><USER8> I usually don't look at videos (it takes too long) but I was complaining with myself that React is needlessly complicated so I checked it.

The point of the video is not so clear, maybe it's why reinventing the wheel again and again and not coming up with a good wheel once again.

First what I like of React vs (example) jQuery: despite the complexity a React (or Angular or whatever) application is infinitely more maintainable than the corresponding jQuery one. I converted one to React when I didn't dare anymore to fix bugs in a jQuery monster I created.

However, wrestling with dispatch, props, Object.assign, actions etc can't be the right way to do it. After all these web applications are the same thing we were doing in the 90s with VisualBasic or similar systems. Replace disk access or local Access dbs with JSON calls over HTTP, not a big difference and yet, coding a React app is a miserable experience. I think frontend developers should be paid twice as much as backend ones: they do a much more difficult job. For sure I don't want to do frontend development: it's not an efficient way to make money.

Some context: I'm mostly a backend developer now and I'm spending a few days working on a React frontend every two or three months. So I'm a little too rusty every time I start working with React. That doesn't help but I can't help feeling that code as complex as this smells of wrong architectural decisions. A collegue told me that Vue is much more pleasant to work with. I could give it a try if I'll ever have a personal project needing a complicated frontend. Server generated HTML is fine for everything else.

<comment><USER9> I agree with your colleague: Vue is a lot more enjoyable to work with. I've disliked React every time I've worked with it and Vue has always been a good experience by contrast. For some reason working with React always makes me feel like it's the Java of JS frameworks. The problem ultimately is, Vue has long since badly lost the mindshare battle, React won. That doesn't matter for every developer or situation of course.

</comment></comment><comment><AUTHOR> I'm a fan of React but I posted the link because this time the author actually used React for many years. Usually, people criticizing it are still learning and are frustrated by React's vast and fragmented ecosystem stemming from its open nature.

<comment><USER2> The author's criticisms do not seem to be insightful. They boil down to "bah humbug stop changing things". Did you get something more useful out of it?

</comment></comment><comment><USER10> What advantage does presenting this in video form have over a blog post?

<comment><USER11> Because I wound never read this blog post. Video, on the other hand, I will listen while preparing my lunch.

</comment></comment><comment><USER12> The comments are a bit disconcerting. "Redux is trash"? It's a finite state machine. At its simplest level that's all it is. Now, I get that requiring it in every single React app makes little sense, but the library itself is just too simple to be considered "trash".

<comment><USER13> It's trash because people are dumb and it encourages them to store all of their state globally.

<comment><USER12> I'm pretty sure that is discouraged by the docs and the author. Just because a library doesn't pop up a bouncing anthropomorphic paperclip and specifically ASK you, "are you sure you want to store this state globally?", doesn't mean the library is bad. Just think of the brain-dead things the C language allows you to do with malloc! Yet that's not at all C's fault.

<comment><USER13> It might not be Redux's fault, but the result of Redux being a popular library is that many projects have all of their state stored globally. This would not be the case if Redux didn't exist. Call me consequentialist, but I think Redux has to share some of the blame.

</comment></comment></comment></comment><comment><USER14> The first 13 minutes are just a history of how we got to React. The remaining is the author saying it's bad, but that he doesn't have a solution.

Not worth the watch.

</comment><comment><USER15> Waste of time - he never explains what we should use instead</comment>


Japan reveals 87 projects eligible for 'China exit' subsidies - <AUTHOR> https://asia.nikkei.com/Economy/Japan-reveals-87-projects-eligible-for-China-exit-subsidies <comment><USER2> Maybe they should subsidize innovation instead.</comment>


Tencent created AI agents that can beat StarCraft 2's Cheater AI - <AUTHOR> https://thenextweb.com/artificial-intelligence/2018/09/20/tencent-created-ai-agents-that-can-beat-starcraft-2s-cheater-ai/ <comment><AUTHOR> White paper (linked in article) here: [https://arxiv.org/pdf/1809.07193.pdf](https://arxiv.org/pdf/1809.07193.pdf)</comment>


IPhone 4 in pure CSS3 - <AUTHOR> http://tjrus.com/iphone

<comment><USER2> Perhaps I'm missing the point: besides a cool demonstration for what CSS can do (when aided by JS), why is this a useful idea?

For anything practical, would one not be better off not being a purist, and using images etc? After all, image formats were meant to store graphics. I'm sure I'm missing something, since I've lately seen a lot of these "pure CSS" things. But what is it?

[Edit: apparently, it is meant exclusively as a demo. And it's pretty slick at that]

<comment><USER3> Doing something in CSS instead of graphics often can let you save some HTTP requests and/or bandwidth — this comes handy if you are into client-side optimization. Also it is easier to update later: just change some values instead of recreating entire image (or set of them). However, depending on the case using sprites or data-uris may by preferable.

<comment><USER4> I'll take the network hit over the CPU hit (and thus battery life). This page is constantly using about 45% of a core on my MBP in Firefox 9.

<comment><USER5> Sure, but the (real or imaginary) savings of this is not about your hit, is about the hit from the server point of view.

<comment><USER6> Correct me if I'm wrong, but if the combined size of an image and its complementary CSS file is less than the size of a 129kb CSS file with "CSS3 images", then don't you essentially lose the benefit of reducing server load?

<comment><USER5> Sure. That's why I added the "imaginary" qualifier to the savings.

I just wanted to clarify that the savings the other commenters talk about were taken from the server point of you.

</comment></comment></comment></comment></comment></comment><comment><USER7> Hi! I'm developer of this iPhone. The reasons i've made it: 1\. Challenge. I saw the icons in pure CSS and deside to make full iPhone with icons. 2\. Demonstration of CSS3 posibilities (not all but many af them) 3\. Inspiration. Many young developers write me and thanks me for inspire themto learn more, use more...

I titled it "..pure CSS3" because this iPhone is actually in pure CSS3, the JS part is for iPhone interaction. Without JS or with it - iPhone is anyway on pure CSS3.

</comment><comment><USER8> Perhaps I'm behind the times, but what tools do people use to make the icons like that in CSS3? Is it simply an art or can you start in photoshop and use some data there to help guide you along the way?

<comment><USER9> Not Photoshop specifically, but it would be easy to take vector art from something like Illustrator and convert it into CSS's simple shapes.

<comment><USER10> Tutorials anywhere?

</comment></comment></comment><comment><USER11> Why do people keep calling things "pure CSS" when they use JavaScript and HTML?

<comment><USER12> I think HTML obviously is allowed to call something "pure CSS," since an HTML document is required to even load CSS, and CSS rules can only apply to DOM elements. JavaScript, however, shouldn't be allowed.

<comment><USER11> You could do it with XML and XSLT.

<comment><USER13> XSLT is typically used to translate XML into HTML. Sure, you could use CSS to style XML, but I believe the point isn't to argue the semantics of the markup, only to say that some sort of markup is required in order to use CSS.

</comment></comment></comment></comment><comment><USER14> its cool but the title is misleading --> 335 lines of Javascript code used

<comment><USER15> A little like this - Donatello, a "pure" CSS drawing library, <http://news.ycombinator.com/item?id=3090290>. Not to belittle the effort, but 335 (or even 1) lines of JS is absolutely NOT pure CSS3. It really bothers me when people do that. It wouldn't have been any less impressive with a more honest title.

That being said, this is a really cool demo.

<comment><USER16> It is pure CSS as explicitly defined on the page, i.e. no images used.

Just because you have a different definition doesn't make it right.

<comment><USER17> It's not _his_ definition. Pure means "Not mixed or adulterated with _any other_ substance or material". Here there is JS mixed, hence it isn't pure.

<comment><USER16> The point. You are missing it.

He or she uses CSS for a job for which usually images are used. Hence his or her use of CSS is pure in that sense and it's also written down that way. It's not misleading in any way, shape or form.

HN. A community of whiny know it alls.

<comment><USER17> I understand what you're saying. I don't agree with it.

Not that I have any problem with it being pure or not, just with your reply to okal.

</comment></comment></comment></comment></comment></comment><comment><USER18> Despite the snide comments, this does demonstrate the power of CSS3, which I think was the designer's intention! On that note, NICE.

</comment><comment><USER19> Anyone else notice the time displayed as local time? Not that its anywhere as cool as the rest of the demo, but I think its a really nice touch!

<comment><USER20> Try the calendar with the real day on it!

</comment></comment><comment><USER21> Worth DOM inspecting, for example, the rays from the sun on the Weather app icon. Insane amounts of work have gone into this...

</comment><comment><USER22> Very nice work. Love the details and the slider screen is a nice touch. Those iPhones in CSS are becoming more and more popular;) I made this 4 weeks ago, it's pretty much the same thing, but done differently.

<http://pothibo.github.com/iPhonePerspective/>

</comment><comment><USER23> Wow, this is pretty sick. I wonder how much time it took to create this.

</comment><comment><USER24> If anyone wants to see an alternative implementation, this one came to mind:

<http://alexw.me/ipad2/>

</comment><comment><USER25> Would love to see a follow-up post detailing how some of the more challenging aspects were accomplished/derived/realized.

</comment><comment><USER26> Not to detract from the coolness of this demo, but it looks like garbage in IE 8 (what else is new)

</comment><comment><USER10> This is a beautiful resume.

</comment><comment><USER27> this is cool!. Good to know the higher level of possibilities of css3. awesome work!

</comment><comment><USER28> stick a flash app in there that uses your microphone, camera, speakers, over tha internetz, and kill skype

</comment><comment><USER29> iPhone4 in CSS3? I predict this to be the highest upvoted submission on HN of all time.

<comment><USER30> It's funny because it's true.

</comment></comment><comment><USER31> (1) It's not pure CSS3, there's JS involved to handle events. Sure it's small, but it's not.

(2) The only real gripe is that the animation is not accurate to an actual iPhone. After the unlock there is a delay between the lock/title moving away and the icons moving in. Both items clear the screen before the other items enter. Also there's a fade on the lock screen items.

Demos like these are cool if they are well done, and correct. Otherwise they feel more like a gimmick. Having written webkit animations, all the added effect (the fades and timings) could be done with CSS3. So if you're gonna do it, do it well.

Now after the criticism, good job. I like that all the icons and font and screens are all HTML/CSS objects.

<comment><USER32> Giving some benefit of the doubt, I really think the author was thinking "Done without images", not "Done without JS" when he was writing pure CSS. That change in perspective makes the title less misleading.

I for one think it's a hell of a job. I'm impressed with the work involved, especially in small things like the positioning of the clouds on the Mail.app, and the loudspeaker design.

<comment><USER31> Ah I've done animation work in the past, so that's what I was drawn to. After that I looked at the other details more closely. Funny what we find ourselves focusing on.</comment></comment></comment>