The Code You Don't Write - <AUTHOR> http://improbabletruths.com/the-code-you-dont-write <comment><USER2> Let me turn this around.

Most feature requests arrive from a user telling you how they think you should solve some other problem. If you can figure out the real problem and solve it better, that will be an improvement over delivering the exact request as given. (If you can't solve the real problem, though, or you misunderstand it, that's worse.)

For example at one company I was asked to speed up a report. The problem was that it was running too slowly and was timing out in the browser. Instead of tackling that fun optimization challenge, I built a feature that would cause any report that took more than a minute to run to be emailed to the current user. My manager said that he received more thank yous for that feature than for everything else the team had done in the previous 6 months.

At another company I received a request to add a feature that would prioritize pushing specific pieces of data to the website. (We'd had some stability problems, and they had no visibility into what was happening.) I knew that adding this prioritization feature would further destabilize the data transfer logic that I was trying to make more robust, talked to my manager, and refused the request. The senior executive requesting the feature tried to get another co-worker to do it instead, that one asked me innocently how to go about it, I got him to push back. Several months later I got enough of a break from other projects to consider the prioritization feature and asked the executive whether he still needed it. His response? "It has been months since data took more than 5 minutes to get to the website, I'm fine."

Also it can help to generalize your solution. At a third company I built a reporting system where instead of just plugging inputs, every form field could template the SQL that was being used. So a report could also generate drilldowns of itself, and you could combine these in a very flexible way. After a while over 2/3 of the special report requests that I got could be immediately resolved by showing that it was available if you combined two features that had been added for other users doing something else. (My turnaround time for other requests tended to be under 2 hours - and the features, documented, were available for anyone who needed them.)

Programmers do not provide value by writing code. We provide value by solving problems more quickly and cheaply than the alternative. The better you solve problems, the more value you provide.

<comment><USER3> So true.

All kinds of work would benefit from being restated in terms of goals rather than specific tasks.

<comment><USER4> And that's something that frequently ends up being overlooked in discussions like this. Software development isn't special because you need to state it in terms of goals. Yet you don't see people telling surgeons "you should avoid operating on people" or architects "you should avoid putting unnecessary stuff in and on your buildings".

What makes software development special is the perceived comparative ease of doing the work: you just sit down and code. There's no risk someone's blood will get septic just because you sat down to code. One of the consequences of this is that eager, novice coders will churn out code they could avoid, because it's cool.

Cautioning coders to avoid unnecessary coding is good, as long as you don't start forgetting that there's necessary coding, too and that writing that code does, indeed, add value.

<comment><USER5> I am not sure about your two non-coding examples.

There is a lot of effort expended to find non-surgical alternatives to many health conditions. Insurance companies in effect tell surgeons "you should avoid operating on people for this condition unless these other approaches have been tried first" in their reimbursement guidelines.

And the architect Mies van Der Rohe is famous for his precept that "less is more."

<comment><USER2> _There is a lot of effort expended to find non-surgical alternatives to many health conditions. Insurance companies in effect tell surgeons "you should avoid operating on people for this condition unless these other approaches have been tried first" in their reimbursement guidelines._

As far as I can tell, not true in practice. For example see [http://www.washingtonmonthly.com/features/2007/0710.brownlee...](http://www.washingtonmonthly.com/features/2007/0710.brownlee.html) for some of the history of the attempts to bring sanity to back surgery.

As for insurance companies, they have some interesting perverse incentives going forward. Obama's health care plan says that they have to spend most of the money they bring in on medical care. This is intended to keep them from causing too much overhead. However the flip side is that the potential profit the company and top executives make is directly tied to how much medical care they get people to have, with the costs passed on to companies and consumers who are now legally required to buy insurance.

They will be very interested in making sure that the cost of medical care grows at a known rate. The growth being so that they can make more money. The known rate being so that they actually can make money. They will give public lip service to cost saving measures. But privately that isn't their incentive, and they are smart enough to know it.

</comment></comment></comment></comment></comment><comment><USER6> It's amusing how quickly programmers-turned-managers forget their roots. Look here:

      I used to get a huge feeling of satisfaction from a weekend
      spent working on a clever hack. I would spend serious
      effort making something run twice as quickly, even when
      there wasn't a problem with how quickly it was running in
      the first place. Meeting those types of challenges was my
      primary motivator.

This is how you were motivated before they gave you a manager hat. This is how the people you manage think. And I wager that this mindset isn't _wrong_ by any stretch of the imagination - as a programmer, I love working around people who program for the sake of programming, who find fun and satisfaction in writing code.

I don't mean to suggest the perception of code as just one of many means to an end is wrong either; it actually makes perfect business sense. It's something managers need to understand. But in your "enlightenment" you've forgotten what made you tick in the first place - how do you translate your new business- value-driven mindset to something the people under you (who don't have that mindset) can appreciate? Hint: it's not by telling them their cool hacks are useless. And we wonder why programmers distrust management.

<comment><USER7> Actually, let me put this another way... back in the original dotcom era, I worked at a startup that decided to write a BIOS. With the amount of hardware we'd be selling, it'd save a million dollars! Well worth six man-months or so of work, right? WRONG. That was six man-months of critical programmer time when the time and money was running out, and all we learned was that we couldn't do it in a 512k PROM (not with our design anyway), and upgrading to a 1mb PROM would have cost more than a license from Phoenix for their BIOS.

That's what happens when you let the inmates run the asylum.

Programmers are fools, for the most part. They don't understand what problem they're really trying to solve. We thought we were solving a cost-of- production problem for a fully scaled business. That wasn't the problem. The PROBLEM was NOT DYING. And that meant getting a working product out the door as quickly as possible, even if it cost more.

<comment><USER8> _Programmers are fools, for the most part. They don 't understand what problem they're really trying to solve._

That's a little harsh. I think it's fairer to say that they often don't have insight into the wider strategic objectives of the company, and that's as much a company failing as anything. I'm now a firm believer in sharing e.g. revenue numbers with everyone in the company and explaining why they're important - people are much more willing to accept things when they understand the wider picture.

</comment></comment></comment><comment><USER9> _" The cheapest, fastest and most reliable components are those that aren't there."_

\-- Gordon Bell

<comment><USER10> I first read this in the 'Bumper-Sticker Computer Science' column/chapter of More Programming Pearls, Jon Bentley. Great aphorism, great book.

</comment></comment><comment><USER11> I've come to a similar conclusion but I tend to think of it as solving little problems with the simplest solution possible. Don't pre optimize and don't pre abstract.

This is a thought process I think you arrive at when you're running your own business or in some sort of managerial role. You start realizing the constraints (time, budget, resources, etc) involved in building software.

When we first come into the world of software we just want to write awesome code. But to truly evolve as a developer you need to start asking real questions regarding what you are building.

Are we making the budget bleed by spending 3 weeks on making the most beautiful piece of code possible for a feature when it was originally estimated to take two days? Can an open source library be used instead of us trying to build something from the ground up? How does this feature add real value to the users of this product?

</comment><comment><USER12> I enjoyed this but on the surface reading didn't like his "it makes me think an octave higher" line, and on reading the context from Sivers (an excellent article that, btw) I even more didn't like it. The analogy just didn't seem appropriate.

However, after some thought I felt the paragraph after with the bulletpoints does actually line up quite nicely (albeit rather obliquely) with what Sivers was talking about and I think I get it now, the finer points just weren't immediately obvious. This a minor niggle but I think that he could have explained that part better, and without requiring a whole other article for context (no matter how good that article is!).

<comment><AUTHOR> OP here. That's really valid feedback and I'll keep it in mind in the future.

</comment></comment><comment><USER13> Sometimes you have to write software to make all the other option much more efficient. Let give an example, we at MobileWorks ([https://premier.mobileworks.com](https://premier.mobileworks.com)) are in business of providing virtual temps to businesses. Since we are built to scale, the entire team has virtually unlimited supply of temporary labor and we use it A LOT.

However, in a lot of cases a little bit of code actually makes the temps much more efficient. That's the real value of code. Making the mundane much more efficient.

</comment><comment><USER14> I think this is more about "feature creep" than specifically about code, though the OP's point is well taken. But the distinction matters: the dilemma I find myself facing is: do I write that extra library or test to make sure things work? Do I take the time to refactor? Is it worth the time?

In those situations, it isn't at all an easy question, unless you know the problem you face requires a one-off software solution with little liability for maintenance.

<comment><USER15> Yes, I think the point of the story was about being business minded rather than indulging your own programming interests and prowess. Or in other words, the feature creep that you add yourself. This is advice is well timed for me ;)

</comment></comment><comment><USER16> This is a really cool article in that it shows the transition of one developer into an architect. I think the grief the author is taking in some of the comments has more to do with presentation than content.

The weekends of clever hacks that he mentioned were essential to his development as they are for all of us. The weekend is a good time for clever hacks. If they have useful business implications all the better. Exciting, innovated packages often sprout from a developer's desire for a more elegant, stable, focused, or powerful solution for a problem or a problemset. These innovations should be abstracted into reusable packages and reused.

However, in a business environment, developers need to be focused on solving problems for users. They need to do so in the most stable and sane possible manner. That means that code should be a last resort when a solution has not already been written. If you miss your weekend hackathon, contribute back to the packages that you found helpful. This way, you can get your kicks from clever new hacks and improve several of your existing projects in one fell swoop!

Writing code (and lots of it) is essential to growing as a developer. Unfortunately, it's often a detriment to software projects.

</comment><comment><USER17> Strictly relying on 3rd-party code without understanding the algorithms and complexities can lead to just as many problems. In my opinion you still better be a very good coder when relying on libraries, just plug and play will fail you sooner than later. I have seen my fair share of this.

When requirements slightly change and you have to adapt a library, suddenly you have to deal with 20k (or more) lines of code and have no idea where to even start. You may just need to use a tiny part of that library but the code is so tightly bundled and abstracted (for good reason) that you have to dig through layers and layers just to make a simple change.

You should at least understand the complexities when relying on 3rd-party code, the Go dependency hell of the game "Haunts" comes to mind (but I don't remember the details, so probably not the best example).

A few additional thoughts:

1\. I said "plug and play will fail you sooner than later" \-- for most startups that "later" never happens or is not of concern. How often has a startup's code-base made into an acquiring company's production systems without a complete rewrite?

2\. Also, when reading some of these posts, I tend to look at the author's motivation/background. This is a somewhat controversial claim (on HN) -- so it is bound to stir up some interest/pubilicty. And also, this is probably not the worst way to court some new clients ("hey, we write less code and waste less of your money"). But I do believe that the re-use approach would be well- suited for short-lived marketing campaigns, as opposed to some other software -- think limited scope and fixed requirements. I'd do the same if I had to work on several campaigns that are probably all similar to a degree.

<comment><USER18> I think there can be good reasons to choose mature library that solves complex problem (even if you don't understand the code) instead of writing your own code. I find writing a simple wrapper around big libraries a good practice, it should limit the external library features to what you really need, give you more control on how it's used and allow to switch to other library or even write your own code with much less effort.

</comment></comment><comment><USER19> This is my constant advice to my startup-hungry-friends. I constantly tell them: "Coding it should be the last item on your list."

</comment><comment><USER20> This is spot on. Every time you solve a problem without writing code, you avoid possible bugs, future maintenance, and legal issues, and you don't spend time. The second-best code, after code you avoided writing, is code you can delete and as a side effect solve a problem. The less code, the better.

<comment> j-kidd Those are certainly valid points, but I can't help but feel like the OP is going down a slippery slope, and will soon start contracting out coding work to 3rd party, which would then comes back full of bugs and doesn't mesh nicely with existing architecture, thus requiring full-time maintenance from internal staffs anyway.

<comment><AUTHOR> I can see how you would have come away with that impression.

We produce a lot of code, so much in fact that it didn't even occur to me to state the value in doing so. We definitely do and will continue to keep a talented team busy.

</comment></comment></comment><comment><USER21> Every non-technical entrepreneur or co-founder needs to read this. Twice.

You would not believe how many non-technical people think that programming is a critical component to the problems they are trying to solve.

</comment><comment><USER22> After fiddling with gnunet for too long I'm wondering if the code you don't write will or will not solve the NSA spying problem. I'm in the will not camp so far because gnunet isn't working, and even if it connected to some peers I wouldn't know how to verify my anonimity. They also say something like you might be protected from the law if you click Y here. But I don't want a not guilty verdict, I don't even want to go to trial.

</comment><comment><USER23> Working as one of two programmers at a startup has really reinforced this for me. As a student and even when I worked at BigCo, I loved taking the time to do things myself, do things Right (with the capital R), and so forth. Now, since I'm surrounded by business people, I'm thinking more in terms of value- provided, not cool-hacks-provided. It's made me ship better things a lot faster and make more people happy. And, really, that's the end goal.

</comment><comment><USER24> I don't think that too many people like the feeling that their work is going to be useless. On the other hand, if you don't have a larger overview of a problem domain it can be difficult to feel that you're making progress doing anything other than optimising and abstracting.

On the other hand there are reasons why the Linux kernel runs dramatically better designed than Windows.

<comment><USER25> The NT kernel is well designed. Windows is full of a lot of other cruft though, a lot of which isn't.

</comment></comment><comment><USER26> This really resonates with me. I'm having a terrible time getting high quality code from my team. Software is expensive to develop, and as a tech company we always try to solve every problem with code first. I'm going to make more of an effort to think about our problems beyond the lens of code, thanks!

</comment><comment><USER27> It took him becoming a manager to figure out what the Programmer's Virtues* are about?

* [http://threevirtues.com/](http://threevirtues.com/)

</comment><comment><USER28>
        It gets me closer to adding value directly, instead of shoehorning my preferred
        solution onto a problem.

But shoehorning my elaborate solution onto the problem is the funnest part. Providing value is easy and boring...

</comment><comment><USER7> Code is not an end in itself, only a means to an end.</comment>


Ask HN: Alternative to Mega.nz or Dropbox - <AUTHOR> Hi HN, Im looking for a free alternative to dropbox or mega.nz that I can use to store about ~30gb of files.
What do you use? I cant justify $5/mo for mega to store 30gb.
Thank you. <comment><USER2> Why free? You'd be using disk space, the service needs to make money somehow.

<comment><AUTHOR> Why not?</comment></comment>


VP of InfoSec at InVision on secure code development [audio] - <AUTHOR> https://www.strongdm.com/johnathan-hunt-invision/ <comment><USER2> Can someone help me understand what's interesting about the VP of InfoSec at InVision? What's InVision?

<comment><USER3> InVision is a tool for making interactive click-throughs, typically, of software mockups. It provides a very natural feeling to prototypes.

I'd expect security is important because of the pre-release and experimental nature of most product mockups.

</comment></comment><comment><USER4> I wonder if languages like Rust would be helpful in areas like this? Especially considering that the strictness of the compiler might allow more "green" developers opportunity to contribute.

<comment><USER5> Rust addresses C/C++ security issues, but that's where the security benefits end (that's still a lot of benefits though!)

I really wish "units of measure" types took off in the langdev world. "String" is woefully inadequate to describe the actual type of a string; Imagine a world where string data is of type <string:urlencoded> or <string:xsssanitized>, and display functions would only accept strings of the correct type. I know F# has this, but unfortunately it never caught on elsewhere.

<comment><USER6> What are the problems with using inheritance to handle this?

      class urlencoded extends String;

      class xsssanitized extends String;

then secure functions can be explicit about what type they need.

      void embedInPage(xssssanitized xssString);

<comment><USER2> Most modern frameworks, in all the mainstream languages, already have this feature, and it's usually the default. You still get XSS because you still have to override the filter to do custom HTML, but it helps a lot.

<comment><USER6> Right; I'm trying to understand the difference between this and the "units of measure" approach the grandparent was referencing.

(To be clear, your latter point is referring to things like 'dangerouslySetInnerHTML' in react?)

[https://reactjs.org/docs/dom- elements.html#dangerouslysetinn...](https://reactjs.org/docs/dom- elements.html#dangerouslysetinnerhtml)

<comment><USER7> There isn't a difference, really. Inheritance is one way of implementing "units of measure".

<comment><USER8> There are practical differences, though, such that it's often not implemented by subclassing string.

</comment></comment></comment></comment></comment></comment></comment><comment><USER9> > _InVision is a 100% remotely distributed company. We don't have an office, > we have almost 1000 employees, we have scaled to 1000 people with everyone > working out of their own home_

just like most open source projects.

one of the bad parts IMO is that you can't hire green engineers since they need more hands-on guidance.

<comment><USER10> I've thought the same, but is this true?

A shout-out to HN folks w/ experience at full-remote companies: are there hiring and onboarding practices you've used that allow less-experienced hires to be successful when working remotely?

<comment><USER11> On our full-remote team the #1 onboarding (and ongoing) practice for engineers is near-full-time pair programming.

For engineers who haven't logged many pairing hours before, it requires a few weeks of stamina-building: it's initially exhausting to hold a model in your head while engaging your vocal cords.

One non-obvious but critical tip for continuous pairing: ensure everyone has an excellent audio environment. Buy the right headset, have a door or acoustic foam installed in the home office, etc.

</comment></comment></comment><comment><USER12> > A bug bounty program, you're inviting the entire world to attack your site. > And by the way, you you're not obviously using production, right, you're > spinning up a clone that has no customer data. And it's not even connected > to your network.

> Also, pen tests rarely perform lateral movements across your app, right? > .... Whereas a bug bounty, those people can continue to move and infiltrate > your network and give you a string of attacks that they were able to finally > polling your data,

So I may have misunderstood (or the transcribing is wrong) but the person says you should give bug bounty hunters an isolated non-production instance and yet wants "lateral movement" ? Sounds a bit incoherent.

</comment><comment><USER13> Should probably say [audio] in the title (it's 30 minutes without transcription).

<comment><AUTHOR> If you scroll down on the page there is a transcription.

<comment><USER13> Oh thanks, thought it was a footer under the audio player.</comment></comment></comment>


King, the Swedish Creator of Candy Crush Saga, To File For IPO - <AUTHOR> http://arcticstartup.com/2013/09/27/king-the-swedish-creator-of-candy-crush-saga-to-file-for-ipo

<comment><USER3> Great! Another game company that makes insane amounts of cash with addictive flash-in-the-pan games files for IPO. Fast-forward 3 years, and we have another Zynga on our hands: a company that has no sustainable way of making money. Relying on short-lived hits does not translate well into a public company (in my opinion). I hate companies like that.

<comment><USER4> Not to mention the scummy nature of how they entice users to pay to play, such as 'insert coin to continue playing' mechanism after you fail a board a few times.

Also offensive is the use of sound in these games to ratchet up excitement like a slot machine.

<comment><USER5> Pretty much every video game from at least the last three decades has "[used] sound...to ratchet up excitement." I would hardly use the word "offensive" to describe this.

<comment><USER6> Don't forget every movie since the end of silent films.

...wait, no. Also silent films. Because _orchestra_.

</comment></comment></comment></comment><comment><USER7> Interesting fact: King has existed since 2003, but they're only now going public. Given that their only real success so far is Candy Crush Saga, you have to wonder if this will be the next Zynga.

(Also fun fact, Notch worked for King until Minecraft became big enough to pay for full time development.)

<comment><USER8> You're correct that Notch worked at King[1] for many years, but he had left King long before Minecraft became big enough to pay for development. He left king in early 2009 and started Minecraft in May 2009 while working for Jalbum[2], in June 2009 he started opening up sales of Minecraft and in August 2009 went part-time at Jalbum so that he could focus some time on Minecraft. He left Jalbum completely on June 1st 2010. A fun fact about Jalbum and Notch (although this is steering way off topic): after Minecraft really started to take off Notch recruited a bunch of people from Jalbum, one of the Mojang co- founders was the Jalbum CEO (Carl Manneh) and a couple of Mojang employees were Jalbum employees.

[1] He was an actionscript programmer, he worked on [http://www.king.com/games/action- games/luxor/](http://www.king.com/games/action-games/luxor/) [http://www.king.com/games/action-games/carnival- shootout/](http://www.king.com/games/action-games/carnival-shootout/) among others

[2] [http://jalbum.net](http://jalbum.net)

<comment><USER9> Did King ever make a claim to the Minecraft IP?

</comment></comment></comment><comment><USER10> I know a few people who put >$10 into this game who previously never bought anything on the app stores. If anything, I'm glad they were able to get more people to link their credit cards to their accounts.

</comment><comment><USER11> Rovio has been around about as long as King, generated $200M in 2012, and hasn't gone public. They have merchandising deals all over the place, and even some big media tie-ins. They have a story they can build off of, and are licensing the Star Wars brand, no small feat.

Candy Crush has a gameplay based on blocks - there's probably hundreds, if not thousands, of mobile apps with the same gameplay. Pet Rescue? Same thing. At least Zynga had story lines or social interaction in their apps. (And by social I don't mean harassing your friends on Facebook to give you a life in the game)

That said, it's a fun little game. I'll play a quick game while tests are running, Vagrant instance is booting, I'm taking a seat in the executive office, etc. Have they hit on a formula that can deliver shareholder value for years to come? Absolutely not.

</comment><comment><USER12> I have no sources for the following, but I think they're a one trick pony. And not because they have a single popular game but just one, well, trick - <USER2> think they optimize "random" level generation based on monetization performance data. And I think they spend quite a lot of time on that. I wouldn't be surprised to hear that most of man hours go into that. It just snowballed from that.

That's it. I wouldn't buy into that.

</comment><comment> marco-fiset The founders should just retire from the fortune they made and let the company die.

<comment><USER13> That's what this IPO is for, cashing out.

</comment></comment><comment><USER14> I truly look forward to the burst of this flash-in-the-pan game startup IPO bubble, albeit with slight sorrow for the truly hard-working game devs who are feeding the producers and business staff with their undervalued efforts.

</comment><comment><USER15> Candy Crush is a pretty good game. Not novel, for sure, but well polished and neat.

That said, a minor success doesn't really mean you're ready for an IPO, I don't think.

<comment><USER4> A minor success after 10 years of trying, no less.

<comment><USER16> With this attitude, most developers should toss in the towel at 'Hello World.'

<comment><USER17> > With this attitude

Most developers including me would probably be better served by a _realistic attitude_ such as displayed above by lowmagnet. Unfortunately, this too takes some 10+ years...

</comment></comment></comment></comment><comment><USER18> Seems like nowadays if you have a single hit you can make A LOT of money but trying to keep it a sustainable business when you depend on hits is very hard. I think they can definitely have a very good business. You just shouldn't look at their current finances as indication for how they will be in the future unless they can keep pumping out hits.

</comment><comment><USER19> Zynga's market cap is listed as $2.9 million. Presumably this is a typo; it's ~$2.9 _billion_.

<comment><USER4> Proof that market cap is just numbers on paper, considering all the lay-offs.

<comment><USER10> They have ~$1.1B in cash, so their true market cap is closer to $1.8B.

<comment><USER20> It sounds like you're trying to get to their enterprise value (simplified as market cap + debt - cash), but market cap is market cap (value of outstanding shares). They also own other large assets such as their building in SF.

With revenue of $231M last quarter their market cap looks pretty bad. But that's expected given their trajectory.

<comment><USER10> Right, I was pointing out that their huge cash pile is a large reason for that high market cap despite their decreasing revenues.

</comment></comment></comment></comment></comment><comment><USER21> I admit it, I was hooked on candy crush and so were a lot of my friends. But in the last month a huge portion of them just quit playing. I wonder if this is just a weird exception, or if this is a larger trend.

<comment><USER22> You eventually get stuck on a level, that (a) is no fun to play and (b) feels impossible. This makes you feel like they're holding you hostage for a buck.

So I slowly stop playing.

And soon the app updates and, gee whiz, I somehow complete the level easily, and I roll on another 10-20 levels until the next impossible "hostage" level.

Playing CandyCrushSaga 100% legit makes you cynical.

</comment></comment><comment><USER23> At a valuation of a billion dollars greater than Blackberry's market cap.

</comment><comment><USER24> And that's the end of Candy Crush then.</comment>


How to Solve the Soldering Problem of HDMI Connector - <AUTHOR> https://www.makerfabs.cc/article/makerfabs-daily-solving-the-soldering-problem.html <comment><USER3> Are there classes one could take that give hands on tutorials on soldering technique? It's amazing to me how people are able to solder such fine traces or even remove an entire chip from a Mobo without damaging it. Where can you learn these skills because the school I went to (ucla) certainly didn't have any

<comment><USER4> This might sound like a non-answer, but there is no singular technique. I learned to solder when I was a tween. I am sure that the work I did was more on the terrible side when I started out. But I got good at it simply by looking at professional solder connections and trying to replicate the look. I even ended up learning how to avoid cold solder joints just by the colour and texture of the melting solder before I knew cold solder joints were a thing. And I thought I was quite clever tinning my leads before soldering them to the board, until I found out that's what you're supposed to do anyway.

So the answer is merely - practice. Everything there is to know about soldering can be taught in about 5 minutes. But getting good at it requires simply... doing it. It is intuitive enough that if you _try_ to make it look professional, you'll fall into good practice fairly quickly.

Recently I saw a video of a guy soldering GPIO headers on a Raspberry Pi Zero, and I was surprised at how different his technique is than mine. But we both solder super cleanly.

It made me realize something: Ever watch people writing something on paper? You easily notice there are so many ways people hold and maneuver a pencil it isn't funny, but the end result is pretty much the same. You really just develop your own method, and chances are your first guess will be really close to the way you'll settle into it.

Soldering cleanly is easier than writing cleanly. I'm a lefty, so your mileage may vary on that one.

As for removing soldered things, I always took great glee in the fact that the device you need for doing that is called a Solder Sucker. There are at least 2 types - a rubber bulb form that sucks solder up in exactly the way you'd expect, and the other is more of a spring loaded cylinder that you load with your thumb, and fire with your index finger.

<comment><USER5> Thanks for sharing your experience! I've been soldering for quite some time but even still there is a limit to my precision that seems magnitudes of orders worse than the ability of others. I guess that's why I'm not a surgeon haha.

Follow up question, how do you know what the right temperature for the iron should be or a particular solder/desolder? Too hot and you'll burn the PCB but too cold and you'll just make a mess of scratches/half melted solder.

<comment><USER4> Yea, I forgot about that - you _can_ burn the board or piece you are soldering or desoldering. There is a sort of rhythm between when the solder starts to flow and when you remove the iron and/or trigger the sucker. The moment you "get it" you'll be able to do it every time without thinking. Kinda like using clutch on a motorcycle - hard as heck when you're trying to figure it out, then second nature when once you get muscle memory happening.

You pretty much have to look at the two things that will be connected, aim your iron in whatever direction will make the solder flow the most direct way, then get in / out in a fairly swift (but not rushed) move. Make sure the solder looks like mercury - sometimes the surface isn't melted all the way (parts of it look dull, or you can see it "stretch" when moving the iron) and you end up with either cold joints, or an ugly partly roasted area - or worse, solder bulging through the other side and burning components if it manages to get hot enough to melt properly. If your solder has flux "built in," the solder should flow really easily. If the solder forms a blob or ball on the iron, the iron isn't hot enough yet, or you don't have enough flux. You'll learn to identify which one it is by observation. The colour/shininess of the solder is a good hint, though. If it happens, wipe it off, let it heat a bit longer, and try again.

I _would_ say "never let solder build up on the iron" except that's actually pretty much the technique the GPIO guy I mentioned was using - he melted it onto the iron separately, then quickly placed it. I would assume your iron needs to be sufficiently hot to ensure you don't end up with cold solder joints, but all of his were really clean. But definitely don't let flux build up anywhere, as it'll eventually burn and make things ugly.

This is really the heart of soldering - knowing instinctively how fast the solder will begin to melt, and in which direction it will flow. That you obtain from practice and paying attention to your results. Not just saying "yea, it's sloppy" but asking yourself what you did wrong and correcting it on the next pin. Solder with intent.

Depending on what you are soldering, you might benefit from using clips until you have the skill down. That way you're not trying to focus on positioning pieces _and_ soldering them at the same time. Clips also pretty much guarantee you won't burn anything.

EDIT: About "scratches" \- you only need to hold the gun against the parts to be soldered - no pressure (no quid quo pro! kidding...). Literally you never need to press hard enough to scratch even if you're moving the iron around. You can use the pointy tip for stability, but you never need to push.

It probably feels like pushing harder on it makes the solder melt faster - <USER2> doesn't. It just makes being accurate harder.

Also, I just reread my comment and had to say phrases like "trigger the sucker" are exactly why I like the name of that device so much.</comment></comment></comment></comment>


The irony of trustpilot reviews - <AUTHOR> https://www.trustpilot.co.uk/review/www.trustpilot.com

<comment><USER2> If anyone can truly report a review, perhaps reviewers of companies who flag every negative review - in an attempt to silence them with the hassle and apparently inefficient and time-consuming proof process - should go and flag every positive review.</comment>


100 Marketing Growth Hacks Learned from 5 Years as a Startup - <AUTHOR> http://www.slideshare.net/WishpondTechnologiesLtd/100-marketing-growth-hacks-learned-from-5-years-as-a-startup <comment><USER2> I found the same content much more readable here: [http://blog.wishpond.com/post/115675436672/growth- hacking](http://blog.wishpond.com/post/115675436672/growth-hacking)</comment>


Ask HN: How does your 10-25 person startup capture internal knowledge? - <AUTHOR> Specifically, what processes, tools, and culture have you implemented to ensure systems-level documentation is in place. Are there are other areas that you document (eg. decision rationale, conversations, meeting notes)? <comment><USER2> We found that the easiest way is with people. Build some redundancy into it, so that someone knows even if someone else quits. People won't really read the docs and docs can't audit code. We had gigabytes of docs; we needed humans to point out the right one and latest ones.

For example we had a rather complicated cache system, which was fully documented, multiple times, with full test coverage. But people still got it wrong.

I think human support is a necessary feature and multiplier. It's sort of like a game where someone needs to be the healer.

Also when you have all the tools, someone needs to be able to train them, and someon needs to know the right tools for the right situation.

I recommend about 1 support person per 10 people. Usually technical managers can also take on this role, but it's better to have someone specialize in it and not be stuck managing.

</comment><comment><USER3> We're a 24 person department; not a startup but we act in some ways as one. I am the in-house tech person and I use a database to record each days work. It's for myself but I know it will be valuable to the person who follows me so it it very detailed. I have a daily backup of it and occasionally make it a PDF just-in-case. I know this doesn't address your overall need. If I were to do that I'd just make mine shared with the group and have them do entries as well. It would be a time-line sort of documentation I guess but still super valuable.

</comment><comment><USER4> 6 person team.

Based on what I previously learnt at Big Internet Company, I created a slack channel to log all meeting decisions so that we could quickly refer back to it. Only works for stuff up to about a month old but is good enough for sprint retrospectives, planning and OKRs. (and then a few months later I realised we were still using the free version... but anyway).

More rigid stuff like coding style guides, design patterns, API docs, design specs were saved in a SaaS that's basically a Basecamp-clone.

Previously I would have tasks, bugs and feature requests, TODOs and FIXMEs, etc. written up as a repo issue (GitHub/Bitbucket) till I realised no one bothered reading them. So I moved them to the Basecamp-clone backlog instead so at least the project manager might glance at them.

</comment><comment><USER3> A Google Doc, shared would also do the trick. I was first thinking EtherPad and I did that for years in-house but then I realized Google Doc is just that only better as I didn't have to add plug-ins to get images. See my other comment for what I do myself, professionally.

</comment><comment><USER5> My last role at a small business ran an internal MediaWiki containing all the technical knowledge and documentation that we brought to the table. We were able to write both small summaries and long step-by-step instruction guides.

</comment><comment><USER6> I love Nuclino personally. Just powerful enough, not as bloated as Wiki solution.</comment>


Go To University, Not For CS - <AUTHOR> http://sheddingbikes.com/posts/1275258018.html <comment><USER2> It was a great post right up until the part where he started talking about computer science. It left me with the feeling that either Zed did not study computer science, and is just talking out of his ass, or went through a very bad computer science program and has generalized that all of them must be that bad.

How arrogant can you be? There's nothing for you to learn from 100 years of algorithms, complexity theory, language or operating systems design? Nothing?! All you need is code?

<comment><USER3> The termination with _extreme_ prejudice of 6.001 suggests that some people mostly agree ([http://www.wisdomandwonder.com/link/2110/why-mit-switched- fr...](http://www.wisdomandwonder.com/link/2110/why-mit-switched-from-scheme- to-python)).

Certainly there's an ever increasing role for people pasting together big libraries and frameworks without a deep understanding of what goes on behind the curtains....

<comment><USER4> I think that there's a big factor that goes largely unacknowledged. Lots of non-Computer Science students have to take introductory programming. Given the choice between teaching a mechanical engineer something like scheme, which he will in all likelihood never use again, and python, which is a lot more widely useful, the choice is clear.

Introductory programming is all about what functions, variables, etc. are. I doubt many intro-level students ever grasped the fact that they were working on more or less the raw AST or the "code as data" thing anyway.

<comment><USER3> BZZT!

6.001 was never a service course and while it was taught the EECS department even stopped teaching their service course due to lack of resources (MIT doesn't let departments get too big for a _long_ time until they're sure they aren't going to suffer a crash like Aero/Astro, which of course turned out to be very wise after the dot.com bust).

Other departments taught and still teach their own relevant for their fields programming service courses, and surprise, surprise, the EECS department has started teaching a Python based service course ... although partly because the new 6.01 course doesn't have the time budget for students to learn Python's syntax and other irregularities (you can't take 6.01 without proving you can program in Python, as I recall).

ADDED: that said, there are a _lot_ of students outside the EECS department who are very upset they can no longer take 6.001, which in times past quite a few did.

</comment></comment></comment></comment><comment><USER5> It's difficult to take this person's point seriously when he claims

>Another way to explain the shallowness of Computer Science is that it's the only discipline that eschews paradox. Even mathematics has reams of unanswered questions and potential paradox in its core philosophy. In Computer Science, there's none.

No unanswered questions? Rubbish, 'P=NP' anyone? Correctness of the assumption of the Church-Turing hypothesis (which is falsifiable if not provable) ? Granted, I'm not sure exactly what he means by "eschews paradox", but I assume this is mostly because the author doesn't really know himself. If he simply means "lacks counter-intuitive ideas", than he's dead wrong. I'll put forward the Halting Problem as an obvious example. Counter-intuitive if for no other reason than people are simply _used_ to problems being solvable.

<comment><USER6> Just a quick nitpick - I've known people to be not particularly impressed by the Halting Problem.

The _real_ result, if you want to wow someone, is Rice's theorem (<http://en.wikipedia.org/wiki/Rice%27s_theorem>): 'Not only can you not decide halting - you can't decide anything else either.'

<comment><USER5> Really? They're impressed by Rice's theorem but not the Halting Problem? I find that surprising, I would expect someone unimpressed with the Halting Problem would simply view Rice's theorem as an obvious consequence of the Halting Problem.

<comment><USER6> If you aren't impressed by the Halting Problem, you probably aren't so sophisticated and able that Rice's theorem is an obvious extension of the Halting Problem.

Intuitively, I can convince myself that Rice's theorem is true ('just write a program that runs itself and halts or doesn't halt on whether it has that property'), but I can't really follow the math and I only think of that because I've already heard of a number of results that use similar translations/compilations from one sort of program to another.

</comment></comment></comment></comment><comment><USER7> > Another way to explain the shallowness of Computer Science

> is that it's the only discipline that eschews paradox.

> Even mathematics has reams of unanswered questions and

> potential paradox in its core philosophy. In Computer

> Science, there's none. It's assumed that all of it is

> pretty much solved and your job as an undergraduate is

> to just learn to get a job in this totally solved area

> of expertise.

Zed is confusing software engineering with computer science. CS is a branch of applied mathematics, and it's not different from mathematics. There are unsolved problems and plenty of areas that require further research.

<comment><USER8> It's not like software engineering doesn't have unsolved problems either, like why is it still so hard to produce bug free software, why programmer productivity has only gone up a small amount despite 30 years of language advances and why most software still has to be mostly custom. The dream from the earlier days of software engineering where we were eventually meant to have components that could easily be mixed and matched to create whatever we want hasn't eventuated.

<comment><USER9> I don't think we'll ever get around having to build software with code and highly trained developers. The world is still very much custom engineered, from architecture to civil engineering, electrical to mechanical engineering, even mass produced items have relatively few interchangeable parts.

<comment><USER10> I agree. However, it is worth examining places like Dubai -- the tallest building in the world, and indeed practically an entire new city, was built by unskilled laborers working for dollars a day.

That's a compelling case for commoditization of talent, but in the end I think it's just a heuristic improvement. It gets you pretty far, but at the end of the day you still have huge teams of PhDs and M.Archs doing the actual engineering. (If _that_ was commoditized it would be a scary world indeed!)

<comment><USER11> > an entire new city, was built by unskilled laborers working for dollars a > day.

Let's see if it's still standing a couple decades from now.

<comment><USER12> >> an entire new city, was built by unskilled laborers working for dollars a day.

> Let's see if it's still standing a couple decades from now.

I didn't realise that it was solely teams of skilled engineers and artisans doing the riveting on Empire State back in 1930.

<comment><USER11> You do, of course, understand how over-engineered is the Empire State by today's standards.

I seriously doubt 30's margins are still being applied.

</comment></comment></comment></comment></comment></comment></comment><comment><USER13> I must thoroughly disagree.

First off, I agree on the importance of culture. But equating a CS degree with coding is just plain wrong; Dijkstra has a nice quote on this. CS is and should be applied mathematics, and what more timeless topic is there than math?

Secondly, there are some serious doubts whether university teaches you to think independently. As a counter argument, read "The Disadvantage of an Elite Education"[1]. Summary of this article: university teaches you--if you're somewhat ambitious--to become an excellent sheep. In other words, it promotes you into being the same mediocre person as anyone else.

That said, I still believe there's a ton of things to be gained from spending four years in a university: network, culture, more-than-average-but-still- pretty-mediocre ability to think, fun, and being inside a solid recruitment base for cool companies.

[1] [http://www.theamericanscholar.org/the-disadvantages-of-an- el...](http://www.theamericanscholar.org/the-disadvantages-of-an-elite- education/)

<comment><USER14> Where did you get your CS degree? Or more importantly, which institutions do you know of that actually teach CS as applied mathematics and aren't just "Java Schools?" I went to roughly a school with what was and still is an incredibly mediocre CS department and, as far as I can tell, this is the case more times than it isn't. I spent time working on a Pure Mathematics degree but eventually switched to CS and I still consider it to be one of the biggest mistakes of my life.

I agree with Zed to an extent, but only because so many CS programs focus on the wrong things and are little more than trade programs. For most young people I meet I strongly recommend they steer clear of CS unless they're going to a school with a proven program.

<comment><USER15> I attended the University of Central Arkansas (Go Purple Bears!) starting in 1998. This is obviously not a top-tier school by any stretch.

I felt like it was an excellent program. We spent all of a semester on C/C++. My program was heavy on the math (Calculus, Differential Equations, Linear Algebra, Statistics, and a few others I can't bring to mind). We studied algorithms, number systems, analysis, and all sorts of topics.

The amount of time we spent 'learning to program' was minimal. Maybe I was lucky, but I have to imagine it's hardly different for the majority of programs.

<comment><USER3> You're lucky (you attended a school which is a variation of one of those "hidden gems" benatkin talked about). ABET only requires:

" _One year of science and mathematics:

1\. Mathematics: At least one half year that must include discrete mathematics. The additional mathematics might consist of courses in areas such as calculus, linear algebra, numerical methods, probability, statistics, number theory, geometry, or symbolic logic._"

([http://www.abet.org/Linked%20Documents- UPDATE/Criteria%20and...](http://www.abet.org/Linked%20Documents- UPDATE/Criteria%20and%20PP/C001%2010-11%20CAC%20Criteria%2011-16-09.pdf))

MIT requires differential equations _or_ linear algebra and no statistics (although I think they used to before the '80s) and of course discrete mathematics which is one of the things I'm sure you're not bringing to mind. (MIT does demand a relative high level of mathematical sophistication, _every_ undergraduate must take or place out of single and multivariable calculus in their freshman year (where it is taught at speed), and SICP/6.001 and 6.01 both use math freely (in 6.01 at least as initially taught you have to use differential equations right off and they don't assume you've previously thoroughly learned them).

I've worked very closely with a UVa Applied Mathematics graduate who was taught C++ (but not C, I taught him the new/malloc distinction :-) back in the early-mid 90s. He's not as good a programmer as I am, but he's _very_ solid and most importantly understands what he's doing and the implications of it. Our designs don't fail because we e.g. didn't realize or think correctly about scaling issues.

</comment></comment></comment></comment><comment><USER16> A university CS program that only teaches you how to code is nothing more than a technical degree. Some universities do this. Many, besides MIT, do not. They should teach everything from hardware architecture to compiler design to basic quantum computing in a decent undergrad program. Some of those will be advanced options. That's fine. Depth comes at the cost of specialization, and every CS grad should have a tiny bit of depth somewhere. The basic first year courses often do not assume knowledge of coding, but they should have a point _besides_ learning to code.

I think better advice for students choosing a program would be to go to University, spend a year studying as many different things as you can, including CS, to see what engages you. Learn how to code at the same time. You might be happier as a physicist who knows how to code than a computer scientist who wishes he knew more physics. There are plenty of coding jobs a CS grad can't do.

</comment><comment><USER17> My main regret about university isn't that I studied CS, but that I didn't study mathematics. Coming out of high school, I didn't have the faintest idea what mathematics really was. I _did_ study philosophy, but the parts that appealed to me most were, frankly, the most similar to mathematics (symbolic logic and proof-writing). And then when I studied CS, my favorite parts...were mathematics again! All quite ironic for someone who always hated what he _thought_ mathematics was.

<comment><USER18> I studied mathematics as an undergraduate and am now pursuing advanced study in computer science. The foundation that studying advanced mathematics provided me for further study in CS is rock solid, particularly since my interests lie in artificial intelligence realms of CS. I've also found that in "the working world", once you prove you can code, you are a favored candidate for more interesting, complex job assignments by your employer.

</comment></comment><comment><USER19> Don't go to a school that teaches programming.

There are many fine schools besides MIT, CMU, Caltech, etc. Saying you should disregard CS as your major because you aren't able to attend one of the elite schools is downright depressing. There are many great schools for an undergraduate that have an excellent CS curriculum.

Any programming at the schools I attended were optional 0 credit labs. And except for the CS 1 and 2 intro classes, there was no designated programming language, you could use any language you wanted. Some chose Ruby, Python, or Java while some others chose C or C++. They were more concerned about your ability to design and implement a proper working solution to the problem given.

<comment><USER3> I agree it's depressing, but if your goal is to continue "programming" past age 35-40 I'm not sure you can make the case for others. See my other posting discussing autodidacticism.

However, there is one caveat: if you go into embedded or get a serious security clearance and stick to government work that required it, you can with much less difficultly continue programming. In the former case the field appears to respect gray hairs, in the latter, it's pretty hard to get the first job (they can't have you working on classified stuff until you get your clearance and you can't apply for or hold one without a job requiring it) so once you have your "tickets" you're in very good shape.

</comment></comment><comment><USER20> I doubt this is actually what happened, but I can picture Zed finishing a post suggesting that students take some time to learn about culture while at university.

Then he decided that he wasn't going to piss off and fire up his usual quota with just that so he added an opening and closing attacking a CS education. I'm in pretty decisive disagreement with him on what he says about CS here, but there's a valuable point in here.

CS students, and engineers in general, are a little too dismissive of the liberal arts. There are some genuine reasons for this, but Zed is right in that it's supreme arrogance to think we have nothing to learn from thousands of years of human achievement in the arts. Ultimately, culture is how humanity expresses itself with the time and energy we've bought for it by making life easier with technological progress. Taking some time to understand the human condition through culture before we transform it would be a good thing.

Plus, on a personal level, meeting people who aren't fellow engineers is generally a good thing. Guys, there are a lot more girls outside of CS than there are therein... Hell, girls, that goes for you too if you just want to talk to another girl for once.

<comment><USER21> The last Art course I took was a digital art course: <http://digital.arts.uci.edu/arts12/>

The impression I got was that not even the scholars knew what digital media was. However, I did acquire a large pool of information of what this grouping of similar people were up to. They were a great source of inspiration and if art is one thing, it's building upon the works of others and the humanities offers a larger pool for you to build upon.

However, when it comes to better understanding how people react to their environment, I turn to the social sciences for a more concrete explanation. My naive understanding of the humanities is that it's based upon assumptions and opinions, but I bet a wiser scholar can show me differently.

BTW, depending on where you go, a CS degree can be more of a liberal art education than a technical one.

</comment></comment><comment><USER22> If all you really want to do is code, my guess is all the art history and romantic literature classes in the world won't result in a necessarily cultured person. Culture doesn't just come from exposure, it comes from receptiveness.

As Dorothy Parker said "You can lead a whore to culture, but you can't make her think"

I think this post would be much more accurate if Zed had chosen a more fitting marquis word. There's tons of things that you learn in college but wouldn't pick up going straight to work. What I think has been most useful, for me, that I would not have picked up on my own is writing for different audiences.

In high school, you most likely wrote like a high school student: (generally speaking) unrefined, undirected, and usually lacking a clearly defined audience. When you get to college, you get used to the academic environment - you learn to communicate an idea efficiently to someone who isn't an english teacher. It's where you learn that all those "rules" they taught you aren't as steadfast as they would have liked you to believe. It is ok to start sentences with "And" or "But" and end with a preposition.

<comment><USER23> learning to write, no matter where you do it, is an extremely valuable thing to do.

Judging from the output I have seen, though, I'm not sure college is the best place for that.

</comment></comment><comment><USER24> i agree, culture is important.

but, how much money is it worth? is it worth 20k? 50k? 200k?

on the flip side, not all of us are brilliant alpha programmers with entrepreneur-class egos. the labor-class parents of one of my best friends are incredibly proud of his BigCo software job, and BigCos don't hire without a degree. The cynic in me wants to call a [software] degree an average person's investment.

<comment><USER25> What BigCos don't hire without degrees? I know people at Google and Microsoft without a degree. I work for a giant corporation, without a degree.

<comment><USER26> That brings up the question; when did they get into the industry? Back when there was no such thing as a Computer Science degree, you of course didn't need one to get a job as a programmer

I'm sure there are some people still who get into Google and Microsoft with no work experience or degree, but I suspect that number was higher when these things were new and all. I also suspect a good number of the people you were thinking of when you made that post had good work experience to help them land the job.

<comment><USER23> you need work experience /or/ a degree. If you have neither, you must first do the job you want for the pay you are qualified for. I spent several years doing computer work while earning a McDonalds wage. (I got lucky, and was able to dramatically shorten this period of time because, well, it was dot-com time, and I could spell C.)

As far as I can tell, though, requirements for degrees at BigCo type jobs are becoming less stringent, not more stringent. (again, I emphasize, this is only for people with work experience. BigCo is usually not the place to do the skilled work at unskilled wages.)

My understanding is that in my father's day, it was /much/ more difficult to get in without a degree. Sure, the degree was in math or business (my stepfather has a degree that sounds like a business degree but that actually was one of the early computer degrees.) or something other than computer science, but my understanding was that degrees were more required then than they are now.

<comment><USER27> It's incredibly hard to get that work experience without a degree. Why would a company hire someone without experience or CS degree for a programming job when they could hire someone with a CS degree for only a marginal amount of extra money ?

<comment><USER23> It wasn't particularly difficult for me, and I don't think I'm particularly exceptional. I was working phone support for nine bucks an hour; as soon as the boss noticed I was a passable C and Perl programmer, I got my programming job. (It was a while longer before I got paid like a programmer... but my point is that if you have the skills, and if you are willing to work for below-market wages, it's not too difficult to get the experience.)

</comment></comment></comment></comment></comment></comment><comment><USER28> Zed, unfortunately or fortunately there are good and bad universities (in terms of CS). If you are in a good university, a lot of professors will teach you lessons which will last a lifetime. You must go check the video lectures on youtube by UC Berkley, MIT and Stanford. They will teach you the most important lesson, time and again, till it becomes a habit for you - its all about the fundamentals. They will teach you that computer science is as much programming as it is applied mathematics (& lot more). I went to a bad school. Teachers were not confident in their subjects, they could not inspire me and I must confess I wasn't smart enough to inspire myself. 4 years later, now I have taken a break from my work, and I am revisiting my fundamentals with the help of the open course ware available on the net and boy, I sure have missed a lot!

<comment><USER28> And about culture: if you question what culture is and what culture gives you, you will figure, that it has a lot to do with habits. And in universities, you definitely get a chance to pick up some awesome habits which will last a lifetime. In good universities, the process is easier & the habits have a wider range (not just discipline etc which are forced by the administration), because your peer group is a lot more determined to attempt leading a meaningful life.

</comment></comment><comment><USER29> I agree. I went through my junior year of a CS degree and dropped out because it wasn't worth it. If I was to do it over again, I would definitely have chosen a different degree. I'm 100% certain that doing a different degree, I would have turned out a better programmer and better at something else. CS (or any programming degrees) are not as intellectually challenging as they should be. If you want to learn how to program than, I have yet to find any degree that will teach you much about becoming a good programmer, so I would recommend going to school for something else.

<comment><USER30> I got a degree in physics which I regret not at all. I recommend the hard sciences: Physics, biology, or chemistry. Or a similarly 'hard' engineering degree: EE, ChemE, MechE, or whatever the engineering equivalent of biology is. ;) (The name for that is still being invented. "Biomedical engineering" is one term you'll hear.)

Take plenty of lab courses; try to get some summer science internships involving programming -- science labs need programmers, so that should not be hard to find.

I'd get a minor in CS, maybe. But, frankly, if I went back to school today I might _still_ prefer to take courses in art and design -- a subject that would sure be handy for my career -- or statistics, and teach myself the CS in the evenings.

<comment><USER31> I always figured I'd do that - I entered as a physics major and spent six semesters as one - but ended up graduating in CS and really wishing I'd done CS from the beginning. I wanted to _be_ a physicist, I didn't want to _do_ physics; conversely, I didn't want to _be_ a computer programmer, but I liked to _write_ computer programs.

If I were giving advice to incoming freshmen (which, I guess I am, since there're bound to be some reading), I'd tell them to try out a whole bunch of different courses, and then major in the one where the _homework_ makes them come alive. Because when you end up spending a good chunk of your life in a field, the important thing is that you enjoy the day-to-day work, not that you enjoy the trappings of success. (Of course, you should probably keep an eye on how marketable the field is - I don't recommend choosing a major just so you can get a high-paying job, but if you find you like CS and you find you like Beowulf, being a programmer will net you a much more comfortable life than being a Beowulf scholar.)

Incidentally, I also took the "don't take courses in subjects you can teach yourself" approach. It worked very well for things where teaching myself involved reading a book, like history or economics. It worked not at all for things where teaching myself involved working out problems, like statistics and linear algebra. I suspect CS is closer to the latter than the former.

</comment></comment></comment><comment><USER32> I regret studying CS. I would have rather gone for CE and learned more in depth about how the computer works. It seems like all the computer engineers at my school are really good coders too, and they understand the hardware better. Opens up more jobs where you can do more hardcore coding like drivers and stuff.

</comment><comment><USER33> CS != Programming. Honestly. No, really.

Personal data points, third party anecdotes even less so, are not a reliable way to extrapolate how CS (or any major) is taught outside of the MITs of the world. Your experiences, shockingly, are one among many, and remain yours.

That said ...

The culture thing is spot on. That is what getting an education is all about.

</comment><comment><USER34> Huh. I'm not sure whether to agree or disagree with this. On the one hand, I learned a lot of interesting CS stuff (algorithms, complexity theory, cryptography, parallel computing, compiler techniques, operating systems design, etc) while doing computer engineering in a university in Singapore. As far as I know, the CS courses in both the older universities in my country also teach the same things sans the hardware stuff we also learned in CE. These are useful things to know which would have been very hard for me to learn outside of university, and we're not MIT.

On the other hand, there are a lot of other sources of accreditation available here that conduct courses exactly like those Zed mentioned. In those cases, I would have to agree that it's not worth the money to take those courses. Then again, they're usually not called CS over here. They have names like Business IT or some such. IMO, you cannot call yourself a CS course unless you teach, you know, CS, which is pretty much the case here. What's the situation in the States? Are there a lot of courses teaching you how to code Java billed as CS?

 _p.s. of course I've forgotten most of the CS stuff that I've learned in university, but just knowing that they're there if I need them and gaining the big picture How Things Work was worth the time spent and makes me a better programmer._

</comment><comment><USER3> tl;dr: Don't major in it unless you're attending one of Stanford, U.C. Berkeley, CMU or MIT.

OK, that's in part my spin---he only mentions MIT---but it's also my considered recommendation post-the dot.com crash. If you plan on/desire to stay programming, I think you _really_ need to be severe about approaching this, seeing as how the normal career of a programmer is over by age 35-40; beating that is going to take a _lot_ more than going to a Javaschool or just starting with your native programming talent.

ADDED EVEN LATER: see this other posting in this thread for two exceptions to the 35-40 problem: <http://news.ycombinator.com/item?id=1391516>

ADDED: going into serious debt to attend a Javaschool for the purposes of becoming a better software developer strikes me as a particularly bad bargain nowadays. If you don't have what it takes to be an autodidact after graduation _for the rest of your career_ you should think really hard about getting into this field to begin with.

On the other hand, now that we're in what looks to be a long Great Recession at best, this may be your best bet, it's just probably not a good one if you don't get into the best school you can and engage in serious extra career long effort.

<comment><USER35> I cannot let comments like this stand. I have seen little difference between students from the top few schools and the rest. If you are only doing an undergrad I see little reason to hold these top 4 on such a pedestal. Any school in the top 20 or even probably 40 are more than a java school at the undergraduate level. The differences are marginal. However, if you plan to go to graduate school I would certainly try to attend one of the top 4 schools.

<comment><USER3> Perhaps ... but that's not been my experience.

A previous HN discussion where there was not merely no agreement but no strong opinions on what school ranked as #5 suggested to me that there's really something to this.

At the very least they deserve their pedestal. On the question of whether it's not worth going to a school that ranks below them, I'm not so sure.

<comment><USER20> Dude, the normal career path of pretty much everyone is over by 35-40. Lawyers that haven't made partner, traders that haven't made been made head of their desk, engineers in general that haven't made it to management, teachers that haven't moved into administration.

It's not like they take all the programmers over 40 out behind the cubicle farm and shoot them or something. I also feel compelled to point out that "programmer" as a career is a fairly new option and information technology is still growing rapidly, so the field in general will indeed look a bit younger.

And, finally, I think your real point is just that going to a school with a worthless Java-lego-blocks program for CS is well..worthless. Dismissing everything but the top 4 schools is just inflammatory and obscures the real point..and, admittedly, I couldn't keep down my gut reaction of inflammation as an alum of one of the schools usually mentioned as a contender for #5.

<comment><USER3> That's not been my observation for engineers outside of software (there's _some_ truth to it, certainly GM plays that game) and certainly not for teachers. Nor is it true for scientists. Don't know about mathematicians. Certainly not true for doctors.

They may not "shoot them or something" but they _do_ stop hiring them. I have some interesting personal anecdotal experience here:

I look _much_ younger than I am (at 49, until a few months ago when I started getting a few gray hairs, I was routinely mistaken for an early '20s college student (this is a family trait, no one thinks my 77 year old father is beyond his early '60s)), so it's trivial for me to not let on to my age until I slip and e.g. mention working on PDP-11s (had one interviewer exclaim "How old are you?!?!!!" that time :-).

Starting about when I turned 35 I found it increasingly difficult to find work in the D.C. area ... until in the middle of one job search I scrubbed my resume of all the info that signaled my age, most especially when I attended college. Bam, it was like night and day, in that job search and in future ones.

Anyway, I believe that the nature of the field of software development rewards experience in terms of quality ... but we all know that most suits are interested in playing as little as possible, even if this results in technical debt or outright project failure that kills the company (one problem is that non-programmers just don't understand the field and its constraints and so on).

To finish, I'm not dismissing all but the top 4 schools, I'm saying that if your goal is to continue programming past age 35-40 attending any other is going to put one more obstacle in your path and by no means will attending 1 of these 4 make it easy anyway. Since you don't believe in that goal I'm not addressing you or your career or whatever.

<comment><USER3> CORRECTION: but we all know that most suits are interested in _paying_ as little as possible

</comment></comment></comment></comment></comment></comment><comment><USER36> >Universities are the last place where people actually attempt to expand human knowledge through research and are willing to teach you their subject. It's the one place where you can go study something entirely and totally useless like Art History or History and Philosophy of Science and nobody is going to ask you why.

And then immediately thereafter:

>Except for a few places like MIT, Computer Science is a pointless discipline with no culture.

While I agree with some of the points made in the article (do go to college, because you'll be a better person for it, regardless.) This is where the article completely loses cohesion.

The way I see it, there are two ways you can teach computer science, and in both it is useful to you as a programmer, provided you apply yourself.

1\. You are taking software engineering, learning to code. It may not broaden your horizons, but you spend four years looking at code and writing code in a structured environment, you're going to get better at coding.

2\. It is a hopelessly abstract mathematical endeavor that has nothing to do with programming. If that's the case, it's just like philosophy of science. Despite its apparent inanity, simply the act of dissecting the how and why of computing will affect you as a person, enhancing the way you look at the world.

</comment><comment><USER37> I started University in Computer Science, and then after some time abroad in Mexico, I switched to International Relations and studied politics and economics.

My plans to go into International Business haven't yet materialized and I'm currently in IT, including both web and Windows client development.

Being a one-man programming team means I have to learn a lot by myself and don't have the expertise of others to lean on. Because of that, I feel I'm held back from my potential. For example, I'm having a hard time teaching myself how to do TDD, or learning new languages or techniques.

I think a CS degree would have given me a great background to be a better programmer. So, I wouldn't discount it and I think you still learn the culture because of all the GenEd classes you have to take in University.

</comment><comment><USER38> > Chances are you'll end up going to some crappy Java school ... > This is > what Universities do ... they train people to think ...

So your average university can't teach me to code, but it can impart to me the wisdom of the ages. Not my experience.

At least at a state university, most kids are there to party and walk out with a credential that (they hope) gets them an agreeable, good paying job. That is the culture that the university has to share, at least by default.

Yes, you can get more out of university than that, and some do. But the idea that your horizons will be broadened and you will acquire culture and Learn How To Think just because you had to pay a pile of money get in the doors . . . no, I'm afraid not.

<comment><USER3> I wonder, how many universities and colleges can you attend and _not_ be able to learn "the wisdom of the ages". All it takes is a few dedicated professors who are _dying_ to be able to teach someone, _anyone_ , who, in my case (this was MIT in the mid-80s), could identify the French Revolution. After that seminar session my professor said he would have retired if no one could have answered the question ... then again, history is my humanities specialty. Hmmm, I still study about as much history as I do CS and software engineering.

I've observed this directly or indirectly at 2nd and 3rd tier schools as well (and MIT's humanities departments aren't by and large first tier as far as I know).

</comment></comment><comment><USER39> I really appreciated my CS education after reading the following from Apple's core data documentation:

"There are many situations where you may need to find existing objects (objects already saved in a store) for a set of discrete input values. A simple solution is to create a loop, then for each value in turn execute a fetch to determine whether there is a matching persisted object and so on. This pattern does not scale well. If you profile your application with this pattern, you typically find the fetch to be one of the more expensive operations in the loop (compared to just iterating over a collection of items). Even worse, this pattern turns an O(n) problem into an O(n^2) problem."

<comment><USER40> to play devil's advocate, what you'd need to know to parse that paragraph was covered by my CS 102 class. So you'd only need to have taken a couple classes, rather than majored in the subject.

</comment></comment><comment><USER41> I'll throw in my voice that a "regular" University can still have a good CS program. I am at a large state university. My theoretical courses have been, by and large, quite good.

Our introductory course is based on SICP and Scheme (with a little Python at the end). Our second course is roughly about OO, taught with Java (but without letting us use most of the libraries at all).

The design of our program is that you choose an emphasis (I'm in network security; there's also networks, graphics, AI, etc., and yes, software engineering). All emphases have theoretical elements, at least to some degree.

I have also had great experiences doing research with professors, who are _very_ open to undergraduates.

</comment><comment><USER42> I disagree with this article. I thought I could code prior to university but had no idea. If you have a chance to go to school, go. If you want to be a software developer, major in CS. Definitely have a minor or double major too.

</comment><comment><USER8> While I agree that your not always learning useful things in a CS degree for someone to have left high school and said they already know everything the CS degree and industry will teach them would be very very surprising.

Personally I have little interest in the alternate university path he is suggesting, I would probably eventually get sick of it and quit. That's not to say I don't find a broad range of subject interesting, just that I'd rather pick up that other stuff online in small chunks when it interests me and spend the 4 years I have of study to focus on something that really interests me like CS.

</comment><comment><USER43> Love the post. Having done college and then post-grad, I have to say that I missed out on the immense opportunities of learning about culture, art, history and so many more things.

Additionally, One thing that that the article did not mention is the environment in the CS departments(just for hanging out... and getting new ideas) which is way more better then the things you'll learn in class.

</comment><comment><USER44> I agree with this article about CS to some extent but I don't fully agree.

I already knew how to program in Java (poorly) before going to university to study a double degree in Commerce and Software Engineering (which is just CS + 1 more year).

So you have someone who's a proto-programmer - learning programming but not quite getting there yet.

I don't go to any of the few places like 'MIT'. We have `learned` python, C, Java and c++, so far. (I put the learned in quasiquotes because my classmates tend to completely forget the language after the course finishes.)

Sure, some courses like Project Management is completely useless, but I do study courses about machine learning, and how to design algorithms.

I'm now in third year and I feel that going to university to learn software engineering has made me a much better programmer than I would have been without it. Stuff like Object Oriented Design and unit testing, I wouldn't have gone and learned it myself... It would take a university to teach me that.

Funny... I was just having a discussion with my lecturer the other day... He was complaining the university's courses were too `theory` and didn't help students get jobs... especially compared to competing universities. I was telling him the point of university isn't to get students jobs but to teach them how to think. If students wanted a place to teach them so they can get jobs they'd just go to technical colleges. I think he was convinced... hopefully.

What about my commerce degree? Well its mostly boring but occasionally something really interesting comes up... like e-business and economics. I've only done commerce because my dad made me to.

The article makes me think though, maybe I should've gone for a Commerce/Science degree majoring in Mathematics instead. Or a Commerce/Engineering majoring in Electrical engineering...

<comment><USER45> "Funny... I was just having a discussion with my lecturer the other day... He was complaining the university's courses were too `theory` and didn't help students get jobs... especially compared to competing universities. I was telling him the point of university isn't to get students jobs but to teach them how to think. If students wanted a place to teach them so they can get jobs they'd just go to technical colleges. I think he was convinced... hopefully."

Probably not, if you look at magazines like the Communications of the ACM you will see that academia sees their "failure" to churn out programmers for industry as a crisis, and are more concerned with appealing to women, minorities, and people who may not find theoretical CS topics like algorithms and data structures easy or fun enough.

They want to increase their rolls basically, and they saw how switching from CS to learn java style trade schools during the internet boom helped do that.

Now that the market has stabilized a bit, they hate to see rolls dropping, they hate to see CS classes filled only with the right sorts of people (i.e. geeks and nerds for want of a better term) to carry the discipline further, so they want to dumb it down even further, make it more mainstream, get all the cool kids in.

I don't blame them I guess. It is mostly the fault of industry blaming them for not churning out experienced senior software engineers.

Computer Science should stay pure, the right people will always come, even if it won't be the biggest or coolest department at uni it will always have a rich culture.

People have their whole lives to gather experience and become great developers, they can do that on the job. You only have a few years at university so you shouldn't try to use it to become a good developer, you should use it to learn core CS theory and whatever else leading edge topics interest you that may or may not yet be used in industry.

Industry would be better off asking themselves why they don't do a better job training developers themselves, providing great career paths, and even contributing back to academia, cooperating with CS departments writing papers, doing research and taking part in conferences.

<comment><USER46> _academia sees their "failure" to churn out programmers for industry as a crisis...They want to increase their rolls basically, and they saw how switching from CS to learn java style trade schools during the internet boom helped do that._

There's a disconnect in the market here. Numbers like enrollment and hiring of recent grads are easy to measure and make for fine report fodder on academic committee meetings, but give a completely inadequate picture of the quality of education. Hiring is a bad metric -- too much of hiring is through buzzword matching, which is horrible. Then again, HR hasn't any reason to get better, if the pool of available hires is so poor, buzzword matching is good enough. This may not be so true in the startup world. It still seems to plague big companies.

</comment></comment></comment><comment><USER47> > You my friend, are an idiot. I hate to tell this to you, but your lack of > education makes you that way. Your failure to expose yourself to literature, > art, poetry, science (real science, the icky kind) has made you stupid. > Another data point against you is that you learned to code and you are > questioning whether you can get something out of a university education. How > arrogant can you be? There's nothing for you to learn from 2000 years of > Philosophy, Biology, Physics, History? Nothing?! All you need is code?

This is inaccurate, but excusable since I assume Zed hasn't been to high school in a good number of years. Things have changed greatly from then—high school courses are far more rigorous than what he describes as "failure to expose yourself to <x>"—and if you're going to a top 30th percentile school, chances are that you took an AP class as well, if not more than one.

<comment><USER3> Hmmm, an interesting point. I'll note that my high school in the late '70s had only one term of the calculus at the end, and the fact that the teacher refused to teach, full stop, wasn't caught by something inconvenient like the independently administered AP tests.

My school system had dropped its honors program because it was "discriminatory", but somehow nowadays they offer 12 AP courses including Calculus AB, the sciences, literature and foreign languages, music, US history, etc.

<comment><USER48> I'm currently coming out of high school (11 days until graduation), and, I haven't learned much. 6 AP courses are offered at my school, none of them are pushed on you until after you sign up for the class and decide that wasn't a good idea. I haven't ever done "real science". AP Physics B (non calculus) is the only ap science course offered, and it still was just "here's a lecture about physics, do your homework, few labs".

<comment><USER3> Sigh, algebra based non calculus physics is cargo cult science much in the original sense that Feynman started the meme. _No one_ outside of education does it this way, or as I like to put it, there's a reason Newton invented the integral calculus to develop classical mechanics and why Edison couldn't compete with Tesla (self-taught Edison didn't have the math to do polyphase AC, which was the only practical approach back then).

Anyway, I feel your pain, I came out of my high school not having learned hardly as much as I wanted to or needed. At least I had some good to great math teachers until my senior year (that was a _literal_ life saver along with a summer school course on a UNIX V6 machine). Senior year was a total loss with no insurance, or "It's a bad sign when JROTC is _by far_ your most interesting and useful class."

How well have you learned your math? That's a key foundation.

<comment><USER49> I just finished a 2 year course on Physics from a high school that was algebra based. I'll attest that algebra based Physics is the biggest waste of time ever. The worst part, if you know some calculus, is that you can glimpse what is happening behind the scenes of the formulas they give you. All I really learned from the course was a shortcut for doing the homework problems: make your givens somehow come out to the units required by the solution; double or halve in special cases. I just hope that mindset won't get in the way when I take a real physics course.

<comment><USER3> Indeed; I now realize I was really lucky when I took my high school physics course in that the teacher didn't assign any homework, it was all lecture and an automatic A. So the next year when I did physics for real with the calculus I had nothing to unlearn.

Although at the same time due to the senior class math teacher having refused to teach I had to learn the calculus at speed, but I managed and it probably works better when you have real physics problems you're solving at the same time. E.g. I learned why trig is really important.

</comment></comment></comment></comment></comment></comment><comment><USER46> _In Computer Science, you only get an expansion of the envelope when some corporation makes a new toy everyone goes crazy over, not realizing it's just like that other toy someone else came up with 10 or 20 years ago._

This is an unintended admission by Zed that he's working off of 2nd or 3rd hand knowledge.

</comment><comment><USER50> I will go to University for Computing. I am one of the apparently few people who love studying - not the act of studying,but the reason to study. Any interaction with people increases my ability to think and speak. This is a quote from somwhere: "The rate of cultural and economic progress depends on the rate at which ideas are having sex." Educational facilities (even if they limit your creativity)increase the rate at which ideas have sex and that's good. After spending two years in an International Baccalaureate program I have found that I have completely changed my way of thinking and speaking. I changed. I am more grown up. There are many people - those who don't understand the reason to spend years in school - who can't even understand me anymore. I ceased to speak in terms of e.g. temperature, but in terms of heat radiation and entropy change. Common people can't understand me. That seems pointless, but it has made my brain more agile in analyzing things that are more complex and that would take too much work to resolve with 'common language'.

This is the power of education. I agree, you don't have to study CS, but for gods sake, if you want to be a programmer don't study a humanistic subject (except maybe philosophy). Study something that can push your brain to think and to create complex in-brain connections.

The reason I say don't study something like history is because I believe that in some decades simple facts won't matter much, only analyzing the facts will. I believe that in less than 50 years we will have computers connected to our brains that will be able to hold all the facts we learn and even perform simple analysis. But the complex tasks will be left to the brain, and so one must learn to increase its mental processing capacity and not to increase memory capacity The other reason for studying CS are connections. Meeting people, potential partners, employers and all the rest. You don't get that if you don't study CS. University is the easy way to come to meet people and get a job. You'd have to have a much better portfolio to get a job if you don't have a technical degree.

On the bad side, universities are expensive. But there's hope to earn the money back with a great degree.

<comment><USER3> Ah, but when you take your first _serious_ history course you'll study historiography and ideally your professor will introduce you to Thucydides whatever the course is about. And that's very relevant to "analyzing the facts", especially since not all "facts" are created equal.

</comment></comment><comment><USER51> Zed wrote "Your entire world has been this horribly inaccurate model of the real world where you were basically trained to be a good little factory worker." Are we sure that university life is any different? I don't discount the value of the liberal arts, but will a college education really encourage the artist within the coder, enabling him to be better? Is it possible that a college education will simply magnify the 'factory worker' training that Zed talks about? Is it not possible for an employer to take a promising coder out of high school, mentor him in the ways of a professional programmer, and provide a cultural education - all without the need for $xx,000 in debt?

</comment><comment><USER52> Nice post. The world is lacking tons of culture (although you don't always need to go to university to get it, especially if you are a self-learner). Enjoyed the post though.

</comment><comment><USER53> I thought the point of the article wasn't about the merits of a CS degree, but rather if someone is a pretty sharp person that already knows how to program, should he/she go to college for the experience and to learn about all that other non-programming knowledge out there. I say, hell yes, the more exposure to knowledge the better, and chances are they will be drawn into CS classes because it truly interests them.

</comment><comment><USER54> I think lots of readers here are getting confused with the two kinds of "computer science." We all know CS as a theoretical discipline, close to math. But most American universities, it would seem, don't teach that. This is what Zed is talking about, the "computer science" that makes up one of these degrees.

Maybe, I'm just overly bitter, but he's absolutely right about the current state of undergraduate level curriculum.

<comment><USER3> I think a lot of this has to do with where the school's CS department came from. For those few that started in the Math Department they tend to stay close to the math. For the engineering based ones (e.g MIT's EECS) engineering is _always_ the prime focus and CS theory is at minimum a means to that end and for the serious CS types they can concentrate in it but they'll still in theory be good engineers. (When most of a school's students are engineers it just tends to rub off anyway, even on the theoretical physics types, it's hard to escape without groking a fair amount about engineering which many realize will be useful in the real world.)

Also, the ABET accreditation requirements _require_ serious teaching of engineering whereas you could skate on serious math outside of the one specifically required half-year discrete math course plus one other serious one (no doubt most if not all require single variable calculus).

</comment></comment><comment><USER55> People will most certainly ask you why you studied Art History in college if it turns out that you came out the other end with no marketable skills, especially when articles about your woes show up in the New York Times as though your poor planning and choice of topic did not lead directly to your inability to find work.

<comment><USER56> The thing that grates is that I am guessing he chose not to seek out the multitude of ways that are offered at university to assimilate "culture" (which, by the way, is a rather nebulous term. Does going and partying three nights a week count?) There's the university newspaper. Bands. All sorts of sports classes. Charity groups. Activism. In some countries, you can get minors in things of interest, like philosophy of science or something.

His view seems blinkered, at best.

</comment></comment><comment><USER57> One good friend of mine best said it, (although university may not be the only place to get all your programming skills honed) it is one of the best places to meet future connections in business or just on a collaboration of a tech project.

</comment><comment><USER58> You can dole out 40k/yr and isolate yourself from the real world for "culture", or you can go to your local library (where they still are funded) and read a book. Your call!

</comment><comment><USER59> zed shaw is british?

</comment><comment><USER60> My take, for what it's worth:

I was a major nerd through high school. We got a great teacher my Sophomore year who taught us all the basics of algorithms, and gave us enough freedom to pursue our own interests. I taught myself 8086 assembly language, and thereby grasped pointers in a way my classmates couldn't.

Fast forward to college. I wasted my time for four years. The most memorable CS things I learned were i, j, and k as iterators (in other words: some accepted formatting which makes reading each others' code easier), SQL (not well, and how hard would it be to pick this up on my own?), and finite automatons.

The memorable non-CS things are vastly more numerable. Anthropology, physics, philosophy, and mathematics.

Ten years down the road, I've found that most of my career has consisted of a) finding and fixing bugs and b) gluing code together. I have devised precisely _one_ original algorithm (I don't mean simply writing fresh code, but writing an original algorithm). An _awareness_ of computational complexity has been necessary, but a deep understanding of algorithms has not.

Here's the kicker: getting a job without a lot of algorithm and puzzle talent proves difficult. Of course, I find this hilarious in the face of my career experience. If I were brilliant at algorithms and puzzle solving, I would have been terribly, terribly bored for virtually _all_ of my career. It's been my experience that interviewers tend to overestimate the complexity of the tasks their team faces each day.

So, I would advise a young'un who already has substantial computer talent to pursue education in a different area. You'll meet more interesting people, develop your character, and have the option of a very different career path if you tire of software or vice-versa.

Of course, all of this goes out the window if you truly want to be a computer scientist. But it seems to me there are at least ten well-paying "code gluing" jobs for every one research scientist position, so I hardly see this as defining necessity for a career.

</comment><comment><USER61> I'm probably wasting my time posting here.

He's completely wrong about CS as a subject of study in general but very right about the problems with CS as a formal academic subject of study. Academia is a religion of sorts. It's primary goal is the replication of the academic system itself, control over a generation who desire an education whereas actual education of people is merely a secondary objective. Just one quote from Chomsky among many regarding education : "A lot of the educational system is designed for that, if you think about it, it's designed for obedience and passivity."

Education is Ignorance, Noam Chomsky - <http://www.chomsky.info/books/warfare02.htm>

</comment><comment><USER62> Yet another coder converted to a great teacher of humanity?

</comment><comment><USER63> After reading this, I'd recommend "Subtlety" by Sarah Palin and "How to Manage Your Debt" by Kostas Karamanlis.</comment>