I didn't apply to Apple - they found me. A year later, I'm still not sure how that happened, since I don't know anyone there. It could have been through a public talk about user experience that I gave (the position was for UX director of the Apple web site), it might have been through something I wrote, or it could have been as mundane as a LinkedIn search.
I went through a series of phone interviews in the usual ascending order. Everyone I spoke with was very sincere and conversational, there were no MS or Google-style "tests" to go through. We looked at work I'd done, I talked about my approach to UX, we got to know one another a bit.
Eventually, they flew me out to Cupertino (I live in NYC), and put me up at a nice hotel near the Apple campus. I spent a full day in an interview room, meeting various members of the team I would be working with, both above and below the position I was being considered for.
The only time we left the conference room where the interviews were happening was to take a stroll over to the cafe for lunch. I went with most of the team, and we talked about day to day life at Apple, what it's like working with tight security, the fancy Apple buses that take employees from SF and the East Bay to work, people's personal projects and hobbies, etc.
I got some insight into the way Apple works, and predictably, there was none of the corporate silliness that you'd find in a less confident company, none of the buzzwords or process for the sake of process. I could see that they all worked incredibly hard, but the fulfillment on everyone's faces made me want very much to be a part of it.
In the end, I didn't get the job - they ended up either not filling the position at all, changing their team structure, I'm not sure - they left me feeling very good about myself and the experience, probably the best way that I've ever not gotten a job.
The main impression I was left with was that I had just wandered back to a pre-dot com era where people worked incredibly hard to make great things, rather than to maximize profits or burn towards an IPO or whatever. It was one of the most human job interviews I'd ever been through.
As for the process of interviewing: for a lot of the more interesting jobs at Apple, interviewing involves signing an NDA. Hence, whether or not they end up getting hired, they're contractually prevented from talking about the interview process.
Having worked there in the past myself but not anymore, I can speak only _somewhat_ freely about it all. The interview process can be intense, taking up to several weeks and with a minimum of 4 interviews, but usually 7 or 8. Often, for practicality reasons (travel to Cupertino), all those interviews are done in a single day, and if it's more than 8 it'll be done across two+ days. As for the specifics of an average interview itself, I can't really say anything.
And as for working there, my own experience was largely fantastic, but it wasn't for me in the end. Apple's campus is by far the nicest I've seen of all the major companies (and I've seen all the ones in Silicon Valley), and though there is always a constant pressure, stress and a major (and insane) deadline to make, working there is incredibly satisfying. Unless, perhaps, you're at MobileMe. But maybe that was just me.
During the Dark Ages, Apple leaked internal information badly. One of the first things that Steve did upon return was try to clamp down (and fire people if necessary). He even had one of those WW-II posters "Loose lips sink ships" tacked up. And there is a certain truth to that. Competition has heated up (esp in the mobile space). Anyone and everyone would love to know what Apple is working on now, and what they will announce next month. Witness the kerkuffle with gawker over the iphone 4 engineering test device.
So people at Apple learn to say nothing, or move on down the road.
I had a phone interview with a manager, and then a three-hour process at Apple HQ in which I was interviewed by three pairs of employees from the team I was applying to work with. I was very impressed that they devoted so much employee time to talking with me. They were very friendly people, and asked an interesting variety of questions, ranging from puzzles to how I'd handle various theoretical work scenarios to technical questions of various kinds.
The gent who recommended me told me that he had to apply six times before getting hired, so I'm planning to keep applying, for other positions.
There. Now someone has posted about interviewing at Apple. Happy? :)
Well, at least that's what some bloggers write about  and I haven't heard about any counter-proofs.
"There's a PR department for that."
All that said, there are plenty of writers/bloggers who work at Apple. Randsinrepose.com is a personal favorite, and contains the writing work of Michael Lopp who may be an engineering manager at the fruit company. This policy of sorts goes much further back than iPhone/Android or any other blog-hyped non-competition.
They email me a week later (post my interview) and tell me "that should work..." They really have a crappy set of recruiters working there. Ultimately, I needed to accept another job (ended up being at AMZN), and Apple never actually got back to me. I've heard some similar stories about recruiter ineptitude there.
Second-hand mention in: http://www.geek.com/articles/apple/unboxing-an-apple-job-off...
Jonathan Ive is like OS X. Nobody knows how OS X actually works, but they know the name and that it is why their screen shows such pretty things.
It depends on where you want to work. If it's in Cupertino I'm told it's a completely different story to the EMEIA office. Having worked there, I can vouch for there really being a culture of absolute secrecy. It's quite common for one team to not know what's going on in the other corner of the room with another team. Secrecy has gotten even more prevalent in the EMEIA office (the office being made up of project managers alone, it was formerly less secretive than Apple World Wide/Cupertino) since the Gizmodo iPhone 4 affair. As regards fear related to Apple's security paranoia? It was moreover regarded as an irritation.
Going back to the interview process at Apple EMEIA (I can't say for Apple WW), it depends entirely upon who interviews you, which team, for what role, and what level. There is no set pattern. There may be an NDA for the interview process, there may not. It depends on the role and the person you are seeing. I know some who've had only two interviews, some who've had nine. It depends.
i think it's the culture, your work speaks for itself. he puts in long hours (on par with goog really) and has a great salary and perks.
I wouldn't know, though; I don't think I recall ever having been to Apple. No, not in a million years. I do find this Apple sweatshirt which I must've found at a thrift store to be especially comfy, however.
And I dont mean to say that apple is out of one's league.
What's the point of this meta thread anyway? Are you planning to work at Apple? If so, why don't you just ask specific direct questions about that?
Flagged for zero content.
As far as actually getting up and talking, all I can really say is that you should stay relaxed. Those people want to like you. They have chosen to come and listen to you because they know you have something interesting and exciting to tell them and they want to know more.
The best talks are the ones where the speaker is relaxed, confident, and speaks as if to a small group. You already have that experience so you know the sort of it's-just-the-5-us-us-here-talking feeling to aim for.
In terms of your slides. Remember that anytime the audience has to read a slide or make sense of a chart, they are not listening to you. It follows then that you should not have much text (if any) on your slides.
Your slides should only contain simple images supporting whatever point you wish to make during that part of the talk; simple charts (2D, no bling); or words written in a minimum of 60pt (sans serif font)
When testing them. Put them up on your laptop and look at them from 30 feet away. If you can't make out the detail, then neither will your audience during the real presentation.
Any real detail, data, background info, etc should be in a separate slide deck that you hand out or make available to download.
One book you might find interesting (I know I sure did) is Presentation Zen by Garr Reynolds .
Best of luck to you. I hope you have a great time
Luckily, you're speaking in the best possible format for this. The neat thing about Ignite is the length constraint. With a five minute talk, you can practice properly (run through the whole thing, making notes on paper about changes you need to make) something like 6 times in an hour - that would take closer to 10 hours with a 45 minute talk. That said, don't work from a word-for-word script. Change things up a little on each run-through. That's always good advice, but it's even more important with Ignite, since it's easy to get off-track with the auto-advancing slides.
I find it a lot easier to talk to one audience massing 150 tonnes than to talk to ninety people. At 90 people, there is still a tendency to try to pay some attention to each person. A sea of bodies is different, at least for me. My village-connectedness circuits hand everything over to my city-survival subassembly.
As for the rest: know your slides and know your stuff. Try not to know your words, if at all possible; it's way too easy to get creamed by a missing syllable, and you need to be a pretty darned good actor/orator to make a prepared script sound like human speech. Audiences like humans; they're not so big on bipedal assistive technology devices that sound like they're reading untrained vocabulary material.
Get someone you're really close to like a best friend or a spouse and have them sit in the absolute middle of the audience (or in the middle of the area where you can make out faces). When you start the talk focus directly on them and give the speech as if you were talking to that one person.
Once you get a few minutes into the speech and you've gotten over the initial hump start looking around the audience and trying to connect to other people as well. But if you start to feel nervous again go right back to your "safe" person and focus on them for another couple minutes. Then repeat the process until you can connect with the entire audience and be calm doing so.
It sounds weird but it worked for me every time.
So (pardon the redirect) you'll find almost everything I can contribute to this topic here: http://www.ideasonideas.com/2010/11/how-to-%E2%80%9Crock%E2%...
I hope this is helpful, and now I really need to get back to work! (Funny how a single comment can derail one's morning.)
I wanted to decline it but it included a trip to Rome with first-class everything. I reluctantly accepted and flew out, writing some notes and thinking up my talk and making some slides on the flight. I did it wrong. I had all of my sentences more or less memorized (instead of just a few talking points) but then I got there and had the most unfluid talk you've ever heard. Lots of ums, fast talking.. the works. Fortunately people in the audience chimed in and asked questions. I say fortunately because this was actually a good thing! They asked for clarification about certain things, or even off-topic things, which broke me from my robotic train of thought where I was trying to replay a speech I had in my head and made it more into a conversation and into a more fluid talk. A series of questions from the audience diverted my talk from cloud computing stuff to an explanation on my usage of Twitter and what it was (this was a few years ago), but I was happy that my talk was progressing.
In the end the trip was amazing (dinner with Negroponte! http://www.flickr.com/photos/pauls/2663284169/in/set-7215760...) and I ended up randomly meeting Johnny Galecki (Leonard Hofstadter from Big Bang Theory). http://www.flickr.com/photos/pauls/2663383147/in/set-7215760...
I still dislike speaking in front of large audiences but people keep asking me for some reason. I did Ignite Atlanta (and spoke too fast as usual) http://www.youtube.com/watch?v=jYDfjaWc3Mc a while back. At least now I have no sweat talking in front of smaller groups and that happens more often.
Funny thing is I also ended up making an Ask HN plea for speaking advice about it back then hehe.
1. Don't "give a speech". Instead, talk to a bunch of people that are interested in what you have to say. The distinction really matters, at least to me.
2. As others have noted. Don't drag your audience into PowerPoint Hell. At least look through the basics of "Presentation Zen". You need to be the focal point, not the screen.
3. Too late for you, but for anybody else with concerns about public speaking: you're going to need to do it sooner or later. Prepare now by joining your local Toastmaster chapter, and get the training and experience you need ahead of time.
I wish I'd read it before completely bungling a presentation about Lua at a BarCamp. Make sure you've got hooking up your visual aids figured out first! I didn't, and it made me start off incredibly nervous.
Also - try and give the presentation to someone who knows nothing about the topic (maybe even post one of the recordings to HN?) and make sure they completely understand what you're talking about. Sometimes we get so close to the topic, we don't realize we're using terms people don't know.
If you're looking for design inspiration for slides with less text, check out: http://noteandpoint.com/ They have an awesome collection!
Most importantly, remember most people who are amazing at presenting practice the shit out of what they're saying. Even Malcolm Gladwell scripts every word of his presentations .
EDIT: Also, I've bookmarked a bunch of links related to presentations: http://www.delicious.com/sachitgupta/presentation
EDIT2: Another tip - find a presentation you really like. Write down the text and record yourself trying to do that. After this - instead of just saying you want to present like Steve Jobs, you can see exactly what to improve on to present like him.
I'm not saying that you should immediately turn to medication, but since public speaking is more feared than death, I think it's only fair to mention something like beta blockers, confidence in which can help reduce the fear.
Once you're on stage, locate a few spots in the back of the room - not cameras, not persons, and keep your eyes at them. Don't look at people, it's confusing at best.
+ Do you know your material?
+ How long is it for?
+ Are you explaining, lecturing?
+ What is the style?
If you know more about it than the audience, then say up front that you expect everyone in the audience to know more than you about various bits, and that you're simply there to share something on which you have some expertise. Starting with that tends to put an audience on your side, and emphasises that you acknowledge their expertise.
Depending on your answers to the questions, though, this might not be appropriate, but without more to go on I can offer no other advice.
Just for reference, I regularly speak to audiences of up to 500, and have several times spoken to audiences of up to 2000 and done live television.
The other suggestion is somewhat controversial, but a friend of mine mentioned the same problem and talked to his doc about it. He gave him a very low prescription anti-anxiety scrip. He takes it now before his talks and says it works magic. Unfortunately I don't recall the name of the drug, but it might be worth investigating.
When i get nervous i smile (even laugh internally) about the fact how nervous i am. It's not worth it. People come to have fun. Nobody hates you.
The other tricks are:
* Reduce slides to a minimum so you are in time for sure. Kill the boring stuff.
* Build up a story through the presentation. People want to hear storys not presentations. Explain Problems, Users, Solutions.
* Try to find calm points in the audience. People you maybe already know or you have spoken before. They will be your mirror to tell you that you are doing everything right. Look for people you are doing this talk for - eg Investors. They will be the ones mirroring to you when you go wrong. To repeat: Look at people and interact with them.
Last of all: You are going there because you are proud of what you do. So don't be scared, be proud. And good Luck!
step 2) It's an Ignite talk. So ignore most of the advice from the video. Assuming you are presenting something you are passionate about, just let that come through.
I've organized Ignite Salt Lake and Ignite at the Velocity Conf. I've watched 100s of Ignite talks. If you search, you'll find lots of good advice on how to prepare the slides and yourself.
My advice map out a coarse flow for the slides, practice a few times with the timer, adjust the slides, maybe do that once more, then make the slides as artistic as you can/will and run through it a few more times, preferably in front of some people and make the final tweaks.
15 seconds can be both longer and shorter than you expect. Practicing with the timer will make all the difference.
On the night of, just go for flow and avoid dead air (though a pregnant pause can be used to great effect).
The number of people in the audience is irrelevant.
Worst case it will be over in 5 minutes.
So instead of being worried, think of it as a chance to give a really excellent talk where you're going to be able to say what you want with less interruptions. Go for it (and good luck :o)
- Practice in front of a mirror, this really helped me focus on my body language (reduce arm waving, and feet shuffling and the like). It also made me realise I don't look like a complete idiot or anything when I speak, and I actually look perfectly normal, which was a big boost of confidence.
- When you get bored of practicing the full talk, do more rapid run-throughs, focussing solely on the key-points. For an ignite talk that might be just one word or phrase per slide. It's quite energising to blast through your talk like that, particularly just beforehand, and it really helped me remember the main points for each slide.
LGPL: GPL except some restricted forms of closed-source use are OK. I believe the idea is that you can use an LGPL library in a closed-source project. Really, both the GPL and LGPL are way too confusing.
MIT: Do basically whatever you want. Just don't claim you wrote it, and don't try to sue anybody.
BSD: Essentially equivalent to MIT.
Microsoft Public License: Essentially equivalent to MIT.
Apache License: Essentially MIT, but you have to make sure people know that you modified the code (if in fact you did).
Academic Free License: Basically MIT but with more legal jargon and more protection (from patent suits, for example).
Really, other than GPL and LGPL, most open source licenses are easy to read and quite clear in what they allow. I would urge you to read them.
If you have $99 to blow, go for it. If $99 is a lot to you, don't bother right now. It isn't worth $500 at all, except if you're doing self-research on a genetic disorder you may have.
They have great customer service and their website tools to view your data are well-designed, for the most part.
There's a been a lot of scientific controversy around these tests, and 23andme's in particular.
Original Source: http://slickdeals.net/forums/showthread.php?threadid=2412731
Killed post to original source: http://news.ycombinator.com/item?id=1937634
The first customer that did _not_ come from my personal network was a result of posting to app directories such as feedmyapp.com and the like.
The best advice I can give on signing and keeping your first customer is to _make them happy_. Be nice. Crack jokes. When they call or email you, respond immediately. Your first customers are really important because they're vetting your business model in addition to trying your product.
Accept/understand that, as you observe your first customers interacting with your product, you're going to have to make changes. Make them quickly and reasonably.
Every company is unique, but that's how I found and retained my first customers.
We launched just like the usual via TechCrunch and Wired, so we made our first dollar and got our first customer quite quickly.
Now we are dealing with the struggle everyone else has which is how do you get your next customer after the PR blast.
Other people we contacted were active people in the active industry forums. This helped get the word out by way of trust.
Second wave came after the first mentions on relevant blogs/new media outlets (http://blog.traindom.com/places-where-to-submit-your-startup...)
Third wave I'd say came from participating in discussions in relevant forums.
Also, how do you handle all the feedback from early customers on product changes? Obviously some are great requests, but many customers make requests are outside of the scope, and could tempt you to change course (if you're on the right course :-)
A great example is the atheist who offers to take care of pets for people for after the rapture. He does a great job of exploiting people's strongly held beliefs, but aligns their interests with his ("look you'll be happy in heaven, but what about your poor pets? since i'm not going to heaven, I'll look after them!"). Check it out -- http://eternal-earthbound-pets.com/
You'll be slowly destroying humanity, but the web is a prime frontier for a Glenn Beck wannabe with online/social/seo savvy.
While custom pricing gives the user the most freedom, it may be confusing, and you may make more money by bundling your services. The classic example of this is movie studios which, when selling movies to theaters, will bundle a hot blockbuster movie with a less popular movie. By bundling these two movies together, the studio ends up with a higher profit than if they sold both movies individually at a higher total price.
That is the important part: by selling goods as a bundle at a lower price than the sum of the prices of the goods sold separately, you can actually increase your total revenue.
Here is a good article to help you:http://livingeconomics.org/article.asp?docId=288
You should be able to use analytics to get a sense of the utilities that users place on each item within your larger product. From there you can construct the pricing of your bundles to maximize your profit.
I also forked something called Add-Another for replicating parts of web forms (when you need to collect 0-n things from a user, e.g. emergency contacts, images, etc.)
If you're using Django with a MySQL heavy application, consider django-stored-procedures (written by a colleague of mine) https://github.com/jeroeng/stored-procedures
Came in handy when I had to whip up a presentation for a recent meetup.
EXAMPLE: http://paulirish.com/work/gordon/demos/GIT: https://github.com/tobeytailor/gordon
https://github.com/entmike/What -- I've been playing with this, written by a buddy of mine. It's a Node.js-based application server, complete with an HttpServlet implementation.
On the Mac Brotherbard's Gitx fork is very cool. https://github.com/brotherbard/gitx
GitFlow - takes your Git skills to the next level.https://github.com/nvie/gitflow
Just work on it until you're satisfied with it, or come up with a better idea to hack on.
Just being in the presence of other people who are working in your field will inspire you, show you how to act and what to do, and lead to opportunities that you can't imagine in advance.
You need to learn how to learn how to be a programmer (or whatever else you want to be).
Something else, don't rely on a job for experience. Most programming jobs (specially if they're boring) sap away your experience instead of enriching it; they make you a worse programmer than what you already are or what you could've been.
What to read would be related to what project interests you. If the project needs C, read up on that. If it needs Python/Perl/Ruby read up on that. Something like 'The Art of Unix Programming' (http://www.faqs.org/docs/artu/) is always useful.
Good luck :-)
"please advise me on how I can begin to impress my employer and prove to them that I am a capable employee".....
You have the answer right within your text.... present more to your employer (more of the stuff you have that he/she cant see now..) Go the extra mile in all tasks.
Couple of questions:How do you learn best? Reading, tinkering and learning, being shown how to?What are you passionate about? - I mean outside of programming, perhaps connected to the opening comment.Have you become self-motivated? or still need a mentor to guide you?
I think if answer the above questions you might discover a path forwards. If you share the answers with us on HN, then people might be able to chip in with suggestions.
Nothing is as devastating as having a job that you're not enthusiastic about and, vice versa, it seems that people are usually more motivated to achieve success when they're doing something they like.
You've graduated in CS, but perhaps you should look beyond the computer related stuff?
1)They have to make an extra investment in this meeting. This will weed off the types who have a memorized pitch and dump on whomever they can find.
2)They will have to make their intention clear before the meetind. No bait and switch.
This actually works for all types of meetings. I've seen a radical decrease in invitations and time spent at meetings,
You can certainly write web applications in Java. They're harder to deploy than PHP but easier to deploy than Rails, in my experience, depending heavily on how experienced you are at administering systems and how much Java enterprise coffee you want to drink.
Java is a mature language. Libraries exist for almost any task you reasonably want to accomplish. There are skilled Java-speaking programmers in your area. Whatever you doing has almost certainly been done in Java already, and it has probably already been documented extensively. Java is an opinionated language: it is of the opinion that your workflow should resemble IBM's more than it does 37Signals', and if that is true, you and Java will get along nicely together.
There, mandatory praise out of the way. Java is horrifically maladapted to certain classes of problems and certain classes of users. One class of problem is expressively operating on strings to produce other strings. One class of users is anybody with a team size less than ten. Many web startups have a small team which is primarily interested in turning strings into other strings: if this is you, Java is going to fight you every step of the way.
99% of web application development for a certain type of business is turning strings into other strings. Many web development languages/frameworks popular with startups give you very expressive options for churning out certain types of strings quickly and with little cognitive load. For example, in Rails, there is very vanishingly little work in taking a bunch of strings from the blog_posts table and turning them into strings which encode a blog post into HTML. And if you want to add special strings that cause comments to be loaded in an AJAXy fashion, that is quick, too. Want to make sure that the strings the user is commenting with include certain strings which look like email addresses? Add one line to your program, and bam, if someone puts in a bad string they get a red string telling them how to make it a good string. It is all string rainbows and string unicorns. If you fat-finger your one line, it is very possible that large portions of your site will instantly break, but that is OK because if you program like everyone else using Rails programs, your magic guardian angel strings will get your attention before you deploy, and after you fix your typo everything is rainbows and unicorns again.
There are many Java frameworks. They can all operate on strings and produce other strings. However, the experience of actually doing this is maddening: pulling off the above you-give-me-bad-strings-I-give-you-red-strings can be a matter of touching six files or more, often written in painstaking configuration formats. The frameworks assume you are guilty of incompetence and force you to repeatedly prove you are otherwise, the better to prevent idiots like you from taking the site down.
This is a problem for startups because web startups are not about turning strings into other strings: that is just what they do. Web startups are about finding a problem people will pay money to solve. That is where they ideally spend most of their efforts. Sometimes, those explorations require code to be written, and when code gets written it should be quick to write, quick to test, quick to deploy, and quick to rip out when you discover your users don't respond the way you thought they would.
Java as it is practiced in the real world looks at that list of requirements and sees Very Scary Things.
The problem you will have with Java in a startup is that Java's frameworks are by and large built for "enterprises". I put that in quotes because in one sense it doesn't really mean anything. In another, it's more of an idea of what governments and large companies want.
Even when using Spring (which, in my opinion, is a "must have" for pretty much any Java Web project), the amount of boilerplate required to set up an endpoint, map form data to objects, map those "presentation objects" into "business objects", map those "business objects" into a DAO (data access object), etc is pure torture.
Now this isn't completely the fault of the language. The language certainly doesn't help matters by being statically typed. This just doesn't gel well with how "fast" Web development works. Compare that to PHP (as just one example), where form data is just a map (hash or simply "array" in PHP parlance). Add a new field? Not a problem.
Add a new field in Java and you'll be making class modifications in about eight different places.
The bigger part of the problem is not the static typing though, it's the philosophies that dominate the Java landscape. There is a joke about the Java programmer's response to any problem is "just add one more layer and it'll be OK". It's funny because it's true.
It's fair to say that Fowleresque division of responsibility based layering is pervasive.
Of course the dynamic languages can have other problems (eg no error when misspelling a form field) and Java's static typing has, in my opinion, made Java's IDEs the best of any language or platform bar none (IntelliJ in particular). IDEs seem less able with dynamic languages because it's much harder (if not downright impossible) for an IDE to, for example, derive the members (let alone the types of those members, if that concept has meaning) on the fly.
Weirdly some in the PHP world have tried to mimic Java's deep layering with these horrific (imho) MVC frameworks that (again imho) simply combine the worst of both worlds. Dynamic class loading, bootstrappers, magic (and sometimes unpredictable) file loading, enforced directory structures and so on are just the wrong approach most of the time.
Java does have some benefits though. There are basically three tiers of languages in terms of performance (from best to worst):
1. C/C++/Assembler: the true compiled languages;
2. Java, C# (and the other .Net languages): the bytecode or virtual machine "semi-compiled" languages; and
3. Python, Perl, Ruby, PHP, etc: the scripted languages.
I did a bunch of the Facebook puzzles awhile ago. The breathazlyer one was quite interesting. I started doing that in Python but it is somewhat difficult to get a solution to pass in that. Java is an order of magnitude faster. C is one or more orders of magnitude faster yet again.
So back to your original question (now that my answer has some context): I would say that using Java may make sense if everyone knows it and is comfortable with it. If not you will find many speed barriers along the way of learning a new language that may just slow you down or (worse) may create huge problems (eg security issues you weren't aware of because something didn't work the way you simply assumed that it did).
None of these problems are insurmountable but the way I figure it is this: when writing something new, chances are that within a year you'll be best off throwing it out and starting again anyway as the problem changes, you identify your bottlenecks (often not what you thought they'd be to begin with) and your scale changes.
So don't try and find the perfect language or platform or framework. Write something now and don't try and solve every problem you may ever have today.
1 - we self host
2 - the relevant performance issue when using java to develop web apps is it's slower to build. I'd be pretty surprised if there were many cases where java / tomcat is slower to execute than rails or django. Now obviously all three are smoked by cached pages, but since a lot of our data needs to be updated daily, that isn't the easiest design for us.
I'm a long term Python developer (since the 1.5.2 days). I've used a lot of different languages so far (from C to Haskell), and I've always avoided Java in the past (at the beginning because it was slow, later because everyone was telling me how bloated it is).
But using Java EE (!) instead of Python for a project a few months ago was really an enlightenment. Yes, it is somewhat bloated (although much less in the recent versions where you can use annotations instead of all those XML files). But on the other hand: It just works - exactly as documented.
With all other frameworks (based on Python, Ruby, etc.) that I've used so far I had to hack around in the framework or in the libraries to make it work the way I want. This starts with simple issues such as Unicode support, where the authors of a library obviously just didn't care if it works, and continues with distributed transactions, where you have to hack up the whole logic inside your application because the framework doesn't support them. Compared to this, with Java (EE) this just works rock stable and has most of the features you'll ever need.
From a performance perspective Java isn't that bad as either. For a project I've compared the performance of two simple (comparable) Web apps that I've wrote: One with Python on Django, the other one with Java on Glassfish). Once you increase the concurrency, the requests to the Django app just return error codes or take a long time to complete. In comparison, the Glassfish app just chucks happily along.
This does not mean that Java is appropriate for all use cases. But just don't believe the majority and try out yourself, if it works for you.
Despite all the bad news you might hear, as long as you stay clear of the bloated enterprise stuff it's a great platform and environment for a startup.
Hosting used to be an impediment but these days VPS make it dead easy to run Java stuff.
However, at some point about '99 or so Java seemed to endure a culture change where Java became popular as an "enterprise" platform and the values associated with that culture started to dominate a lot of discussions about how to do things. Suddenly everyone wanted to use every feature of J2EE in every project (largely for CV padding as far as I could see) - with predictably awful results.
However, Java has always been a pretty decent platform - we wrote search engines in it and things like Lucene continue to work pretty well. There are a lot of fascinating libraries for Java and performance can be excellent - it could be pretty fast in 2001/2002 and I assume it hasn't got slower....
If you can use Java and focus on "Keep Things Simple Stupid" then I can't think of many reasons not to use it - it might not be fashionable any more (those days are long gone) but it sure is capable.
EDIT (Summary): We knew Java well early on and so used it to prove a market, leveraging open source libraries along the way. Do I think Java the language was a particular competitive advantage to us? No. But do I think any of PHP, Ruby or Python would have been either? No. (Lisp - probably yes! but we don't know it well enough to use professionally). To be honest, our main concern early on is to release early and prove the market, with whatever tools we can use.
When I started my project, I tried ruby, but after 2 months of fighting, I just went back to java.But somehow I'm gifted, I never did java at bigco, I did it at another (desktop) startup before and have a critical eye on the java current trends. I don't use Spring and all the famous bigco frameworks, I use a simple setup (PicoStuff, jetty, Webworks).
But in think most "objective arguments agains java in a startup" are plain wrong. The real problem of java is that all people know about it is eclipse and spring and the EJB2.
edit: BTW, today I do PHP, and we're integrating with drupal, and what I see in drupal is far worse than the EJB spec. It's tangled and static so you can't test anything in isolation, and there is no spec. The core code is really difficult to read because everything is passing maps of string around.
If your observation is based on reading HN, likely it's a bit skewed. Paul Graham has bashed Java and Java programmers quite a bit in his writings: "The programmers you'll be able to hire to work on a Java project won't be as smart as the ones you could get to work on a project written in Python."
That said, I would have to agree that Java is not the language of choice for small startups. There is a lot of overhead involved in setting up a Java project compared to other languages/platforms, and the problems that Java is best at solving aren't usually the problems you run into in a small web app (unless you're dealing with a lot of data).
Java isn't as fun to use as newer languages, and doesn't have the vibrant community that Ruby and Python do (even if you include JVM based languages like Scala and Groovy). Java doesn't attract creative types. A web designer looking to pick up a first backend programming language is probably not going to choose Java, and thus they aren't going to create beautiful documentation repositories, fun open source projects, organize meetups, or create the next revolutionary social app.
However, there is a reason that so many large startups start to lean on Java once they reach scale. Java is fast, encourages good design, and is great for large development teams.
It turns out, I am really a static-typing ...type after all.
With utilities like Spring Roo, frameworks like Jersey (JAX-RS), IDEs like Eclipse and platforms like GAE, Java can be really productive.
The problem is that web startups tend to want to develop things quickly and be able to pivot quickly and easily. Java is not best at those things.
I know Java and worked with it for years. I do all of my startup coding in Lisp. Java forces you to do a lot of things that may make your code more reliable and easier for others to use, but it comes at the cost of being less productive, and in startups, being able to develop quickly is extremely important. That is why languages like Lisp or Ruby or Python are much more popular in the startup world.
In answer to your questions:
1) Yeah, good cheap Java hosting doesn't seem to exist. That said, I think the Rackspace Cloud and Amazon EC2 are great solutions and great value for money.
2) Java is a high performance language, if you get performance issues it'll be your design/archiecture.
3) thingloop.com, successful from a technical standpoint, business-wise, the jury is still out!
On the whole question of which language, I'd say:
a) avoid religious arguments - my language is better than yours! They all have advantages and disadvantages.
b) a lot of it is down to what's cool. Ten years ago Java was the coolest kid on the block, now it's RoR. Thinking longer term, you might want to consider what the most available skillset is in your area for recruitment purposes.
c) if you've got a bunch of guys who already know a platform inside out, then stick with that. They'll almost certainly be way faster.
Since we come from enterprise environment Java is the second mother tongue to us and I have got accustomed to mighty autocomplete and refactoring features of eclipse. The main reason for diverting from Java would be purely of taking intelectual pleasure in learning new things and checking if python/ruby frameworks live to the expectations.
We did some contract work on french social startup using a very lightweight web framework called Stripes (http://www.stripesframework.org). It was much better experience that using component based UI frameworks like JSF.
Needless to say - for quick web hacking I still fall back to PHP.
As (almost) always, performance issues are with the db. And, as always, you should think about the data structure that you're using.
A web application is often more than the choice web framework. When you choose Java as your fundamental technology you could build your business logic e.g. in Java/Scala and your web tier in Ruby on Rails which you can run on JRuby.
At least, that's probably the choice I'd make... :)
Experience was good. I generally try staying away from frameworks like Struts, JSF for a consumer facing web app. They make sense in enterprise domain, but not so much in web.
I am right now building a product on my own using GWT (Java to JS cross compiler), Scala and Mongodb as my stack. Experience is again pretty good.
On the backend I chose Scala over Java mainly because I require lot of parallel processing to crunch data.
However, when u write a non-trivial app (more than a web front-end or REST API), java starts to shine: there are soooooo many open source projects available with friendly commercial licensing, good tools for debugging, etc.etc., that you save a lot of time by just incorporating things rather than writing things.
This is not to say other languages don't provide these features - rails has some nice momentum (growing list of projects), python too, and say what u will about msft, c#/asp.net is a good combo (VS.NET is a great dev environment, and there is a relatively small but growing open-source movement - and Mono is fantastic for cross-platform work).
...but i'd say that the massive amount of effort and open source projects in java have been a godsend for my work - especially recently - and saved me enormous amounts of time.
...also, I've found that recent groovy and grails versions have made web dev super simple...and u can call all your java code ease. (And groovy++ (statically typed groovy extension) makes groovy performance for a lot of thing as fast as java.)
But the bottom line is that u should choose what u r most comfortable with.
Java would be a fine choice. Especially java / groovy / grails...and ignore the java projects u don't need (EJB, etc.).
On another note, I think the one language that startups should avoid (again for more than a simple web app talking directly to a DB) is PHP. Just try to extend it...or talk to an external service. yes, you can wrap your services with REST APIs...or use something like thrift...and i know there are several successful companies that use it (facebook, etc.etc.) - and i've been part of companies that use it too...but i think PHP puts yourself in handcuffs that a startup shouldn't really need. ...and it creates a "silo" around web development - not a good way to get going.
my $0.02. ;-)
The JVM is extremely fast and optimized. We handle many thousands of requests a second on a few VPSes.
1) Java isn't amenable to pre-installed hosting like PHP is. You usually deal with machine images that you have to prepare yourself. Jetty 7 + Nginx is the going coin, it's quick and easy
2) Java is outright the best performing language of the ones currently used for web development with any degree of frequency (PHP, Python and Ruby being the other ones I'd mention). There's 10+ years of optimization and garbage collection research in those VM's, and language is statically typed, which increases verbosity yes, but also performance
3) If you extend the view beyond start-ups, Java isn't just getting used - the world runs on it. If it's a web app of any meaningful size, there's a 90%+ it's written or getting written in Java. The only other language that has this wide an acceptance level is PHP, which is a different animal entirely. Not to disrespect RoR or Django, but their overall share of the web development market is negligible
Keeping in mind the bias that comes from 12+ years of dealing in Java, here's a quick pro-con for what it's worth:
pro =>- Java is fast. Very fast- Tool support is unrivaled. It's hard to appreciate what an IDE can do to speed up your work until you've gotten your first couple dozen IntelliJ keystrokes in the muscle memory. RoR is not faster to write than Java (a frequent claim)- Library support is unrivaled as well. Whatever it is, there's already a library for it, usually quite well-documented, and most questions that come up are googlable on the spot (something I sorely miss when I have to work Rails on occasion)- with the entry of Play, speed and ease of web development is approaching dynamic languages: write, hit reload, be done- knowledge and people to hire are available widely- the JVM is also home to Scala and Clojure. Starting in Java and moving to Scala is a pattern these days
con =>- it's wordy and, compared to, say, Ruby or Scala, downright ugly. Not a big deal as far as start-up success is concerned, mostly a hacker bragging right. Nothing wrong with bragging as long as it doesn't get in the way of getting stuff done- generics and collection syntax is unwieldy. IDE support takes care of some of that, but not all- there's arcane stuff one needs to get used to - a learning curve of sorts. Again, mitigated by the widely available documentation and Google support
hope this helps.
Based on my observation, some heavy hitters are using Scala in production, but the learning curve is high and development time is slower that PHP, RoR or Python.
which is not to say it's bad. it's actually really good, with lots of great qualities.
but compared to PHP, Ruby and Python, it's rather verbose. As a general rule you can pound out way more feature points per hour in a less verbose language than a more verbose one.
there are other factors, sure, but I think this is the biggest one.
Secondly, we are Berlin based. Security and stability is such a big issue in German companies. You might agree or disagree if it is really true for Java software to be safer or more reliable, but just mentioning "Java" helps to sell to those companies.
Java is great for rapid development once the development process is set up correctly. I've actually ported the app to Google App Engine in the middle of development once I learned of its generous hosting plan. Java is one of the two languages supported by GAE. I did use Python for quick scripts in import/export and building up data sets from dev environment to production servers.
I'm by no means a hugely experienced developer but after spending a short time working for an organisation that use Java EE extensively I now have learnt how to use and deploy pretty much the whole EE spectrum - Servlets, JSPs, Web Services, EJBs, JMS etc. That provides a huge arsenal for scalable web application development.
I think the reasons Java tends not to be used in the web app world and PHP / RoR not in the corporate world is down to the backgrounds of the developers. Web developers who come from a freelance web site building background are more familiar with PHP - its a very consumable technology for people that haven't got a lot of time to invest in learning technologies. Career software developers often are trained in Java development on the job once they graduate (from a degree which will likely have had a large Java component).
I personally don't know much about PHP, but I see the most likely platform to be future proof as Ruby on Rails. But for now I'm sticking with Java, it still has a fairly substantial future.
These days there is basically no reason to do webdevelopment in Java - even if you have legacy stuff lying around, JRuby or Scala will serve you much better and neither is that hard to learn and both will get you over Javas sever limitations (really, no anonymous functions? No Closures?)
Java is mostly snubbed in web startup land and associated with boring corporate work.
More discussion here: http://news.ycombinator.com/item?id=1378815
Of course, we aren't doing content management or anything, the front-facing stuff is a tiny minority of what we do, so that makes Java an even better choice. If I was writing a CMS or an app that was primarily webby in nature, I'd take a look at a more dynamic language (possibly still on the JVM).
Our ability to deploy to Windows and Mac is giving us a leg over some competition that's unable to serve the larger Windows market. Being able to knock out new features very rapidly (within minutes/hours) is another advantage.
Reminds me of PG's essay about how Viaweb was able to implement a competitor's feature the same day it came out...
Java's greatest strength is it's speed, a dearth of open-source libraries for pretty much anything you'd need. It's very possible to write light-weight simple code, if you shift out of the enterprise mind-set.
Theres an ever growing list at http://wiki.apache.org/hadoop/PoweredBy
1) founders are most familiar with Java
2) founders are more comfortable with top-down engineering practices and not with bottom-up, release-early release-often approach.
3) core technology depends heavily on non-trivial open source Java libraries.
Java is widely used in Financial, Insurance sectors. (There are several others as well but I speak of these from personal experience) I can offer up to $95k for a top level Java programmer. I do not think start up salaries can go that high. Of course there are no big stock options pay day like in a start-up but it is easy to see why some programmers would rather work in a bank than at your start up.
1. creating application in PHP is quite easy. no servlet , no configuration and just start writing the application.2. PHP hosting are cheaper. But now a days Google apps are providing free hosting for Java apps.
BTW I am quite in favor of Java web apps. Java web apps are more stable and maintainable.
If I had to guess, I'd say that HN doesn't drive anywhere near the traffic that a Digg or Reddit front-pager does, so there's not nearly as much incentive to try to game it, but that may just be me being naively optimistic. :)
Everything I know about web vulnerabilities in a sentence: User input cannot be trusted. Do I have room for two sentences? Assume every string in the application is user input unless you've got provable chain of custody back to God Almighty, who is the only entity I would trust to handle whitelisting correctly.
There is a regularly published list of the most common web vulnerabilities. Most have had well-understood fixes for years or decades, and will have much better developers than you or I shoot themselves in the foot today.
Happily, you can pick some of this up as you go along, because insecure web applications (three words which could be two words without compromising informational content) can still produce meaningful business results. Don't let this be the reason you don't write something, unless something is nuclear power plant control software or the like.
I live in Canada but have a business and personal US bank account in the US with Harris Bank (owned by the Bank of Montreal). You can set it all up by mail. I've never even visited the branch. http://www4.harrisbank.com/personal/0,4458,359877_390942,00....
To transfer money between my US and Canadian accounts to use at home, I use http://www.xe.com/fx
It's free to setup and between Canada and the US, you transfer at no cost by choosing the EFT/ACH options.
Firstly, you'll should plan on doing most/all the work yourself. This isn't strictly required, but I find it to be the most fun part of the job. Save the money for advertising, PR, link building, domain registration, company formation, accountants, etc.
Alternately, you can select a product you you want to build, save for a few months, and then just pay someone to do it for you. There was a good interview on Mixergy about exactly this method, where a $2k investment turned into $80k/month. http://mixergy.com/free-apps-interview/ I wouldn't expect to have the same kind of success, but it is something you could pursue.
If you are more interested in sitting back and investing in established companies, a lot of people will try to sell you hot stocks or whatever. Don't listen. In the long run (3-5 years) no one, save a very few people like Warren Buffet, beat the market. Roll some percentage of your money into an S&P index, and international index, and a bond index, then re-balance every year. The closer to retirement you are, the more money should become cash or CD's. The younger, typically the more in stock + international. It's boring, but it's the surest way to have your portfolio grow.
Personally, I prefer the startup route (but I do plenty of investing as well).
- specialized WordPress Plugin development and sales
- making Android or iPhone apps
- making HTML5 apps with a mobile phone framework, and which work on Android and iPhone phones
On getting programmers, you'll want to keep trying, and putting comments out in forums and anywhere you can. I advise you to find some programmer in or near your timezone so that you don't end up playing the timezone game. And you'll likely want to check in another hemisphere. For instance, if you're in NYC, you could consider contacting some developer in Brazil.
Be excited to lose the money tho and chalk it up to schooling/learning.
That said, I think the usual line is to take a ten minute break every hour. Should be good for your legs, too. But really, talk to an ophthalmologist.
In fact, I've heard a lot of people say that the 30-30 rule has helped them be even more productive. Spend 30 minutes doing hard work on the computer, and then 30 minutes off letting your brain relax.
I also use Flux on my mac, so perhaps that helps.
I also find that if I am wearing glasses, going to contacts helps, and vice versa.
I think what you should do is make a site where employers can post a guaranteed test for hire situation. For instance, an employer would post a job, you would apply to it by signing up for the job. You'd have to do a test project for free, but the catch would be that as long as you could meet certain requirements you'd be guaranteed a job.
I'm not sure if this would work, but it would certainly put the theory that there are a ton of capable programmers sitting around to a test. It's pretty risk free for the employer as long as they are careful with designing the test (and they could even design the test to get something useful out of it to offset their risk).
Just my .02
Unemployed people have talents like everybode else and someone should come up with an idea or program to collect, develop and channel those. I can't speak for other countries, but here in germany I see a lot of stuff that could be done if one could mobilize them.
All of that being said everything goes through cycles and there probably will come a time in the not too distant future where something like this could do very well. If you can overcome the adoption challenges of today, you'd have something very powerful when the next tech recession comes.
that is the basics of an open source project, to turn this into a profit generating machine I would suggest a third party which owns the created code/project
with open source the code is given to those who it can help, this option lets a third party sell it
management company gets x% and the rest is split among the devs.
as for deciding % per dev, it should be decided by the impartial 3rd party which is the company doing nothing more then selling the product.
now someone start the 3rd party company, define the % you want for management and then define the market for your services and meet competition of others who do it for less or do it better
Lots of us were taught (correctly) to follow a period with two spaces. When you do that on your test, every single character from there on out is highlighted in red. It thinks you're wrong on every word, and there's nothing you can do about it short of backspacing to the period in question and erasing one of your spaces.
It pretty much makes the test useless. And since that's the only thing you let me see, the only inference I can draw is that the rest of your product is of similar quality. In short, you lost me.
Multiply that times everybody else who visits your site and types that way, and think about the impact it will have on your sales.
Having a keyboard shortcut to go the next lesson seems essential, it is annoying to have to keep reaching for the mouse in a typing tutor.
I would like to see more 'nerdy' topics in the practice sections, stuff about programming, video games, passages from monty python skits, etc.
Other than that, I am really happy with it. I would gladly pay 10 bucks for something like this.
Also, I think I would really build up the speed test you have and use that as a marketing tool with something like high scores posted to Facebook.
The keyboard should not be required to move between exercises - the space bar would provide a better alternative.
Could you color coordinate the key color with a predefined finger color?
You should market this to schools with classroom subscriptions. This would provide a great, cross-platform alternative to Mavis Beacon which costs $20 per computer to install/update and cannot be used at home.
One gripe: am I the only one who still uses two spaces in between sentences?
1) The paragraph symbol threw me off for a second. It may be a good idea to have a small explanation at the top for how line breaks are handled.
2) I seem to manage better at typing tests when the paragraph of text to be typed is on one area and the input box is in another. Not sure if this fits the model, but it could be a configurable option.
Is the Facebook button meant to be displayed there?
1) Providing value in a scalable fashion in SEO is hard, because Google has an incentive to make it hard. If SEO were only as hard as AdWords, Google would lose billions of dollars. Google considers virtually any repeatable process that improves rankings to be black hat. I don't enjoy having to joust with a giant team of PhDs who have infinite budget.
2) The SEO tools space is hard. Small-scale website owners are often very skeptical that there is positive ROI in SEO. (There is positive ROI in SEO. Crikey, if you learn one thing from me this year, learn that.) You have to do huge amounts of teaching to raise people to the point where they can begin to benefit from it. That starts, literally, at "What is a search engine?", because most website owners do not know, especially in small business.
For marginally savvier website owners, like the average HNer, you can skip some of the teaching and proceed directly to "I don't want to pay you money for this." You've been on the same HN I have for the last year, right? We talk a good game about raising $50,000 each of a dozen angels and valuations in the tens of millions and whatnot, but what happens every single time someone suggests raising prices past, oh, $20 a month?
SEO makes me thousands a month. I'm not interested in selling it for less than many hundreds a month, at the low end.
3) Enterprise sales is not my idea of fun. Selling SEO to people who really would seriously benefit from it -- companies which do a lot of transactions online -- requires a high touch sales process. I'm not incapable of that -- I do it for consulting -- but it isn't my passion in life, and it wouldn't scale easily without me building a sales force. That requires a whole lot of skills (hiring, managing salesmen, showing up promptly at nine to an office somewhere, etc) that I don't have experience with, natural aptitude for, or any reason to suspect that I'd be really good at.
4) What would it do, really? (Your "real" question.)
+ SEO analytics: Hard to demonstrate value. Most obvious feature sets are well represented by free competitors. Significant competition from SEO training providers who like to throw in a bag of tools subscriptions to make the $N00 a month fee look cheaper.
+ Tools which purport to "do" SEO for you: if it works Google will call it black hat, if it doesn't work it is snake oil. I have seen an awful lot of snake oil.
+ Demand Media In A Box: Probably the best SEO tool I can think of writing -- automate topic selection and direct outsourced production of content for it. Let's hypothetically pretend that I both was capable of and wanted to write this: what is my incentive to selling it to people who pay little money and need lots of handholding when instead I could point it at any problem domain I wanted and make a million dollars each time?
5) What is the opportunity cost?
I'm pretty good at what I do: I make and sell software, and I do occasional consulting for other people who mostly make and sell software. Consulting is fantastically lucrative, and would (and has) helped me get together enough money to launch any software/service I care to.
I picked out one I thought was a good bet, and am busy implementing it. Ask me next December, but I am cautiously optimistic, in a way I have never been optimistic about SEO tools.
There may be a profitable, addressable market for SEO tools. There certainly is for SEO-related training/services -- SEOBook and SEOMoz are both doing quite well. YC has funded at least one SEO-related company.
I wouldn't touch it with a ten-foot pole, though.
If you had to choose _one_ vertical to be in, would _you_ chose one where every competitor in it knew all the dirty SEO tricks in the book?
After spending well over $100k in SEO i can tell you sadly the most effective tactic has been spam. Yep, tons of links on sites, setting up gateway pages that are focused on particular keywords, spamming social sites with links, setting up blogs to target keywords, etc.. I've hired/fired about 5 different companies in India and finally found one that is working magic for us.
Google's algorithm is not a mystery - most 'SEO' people will try to sell you some snake oil. I was paying 10k a month to a top name SEO consultant (very popular SEO book, well respected) and never felt so cheated in my life. Beyond the basics of SEO like semantic structure of your HTML and URL's - SEO is primarily a popularity contest.
He's an excellent writer and marketer, but it's not like he's privy to some magical SEO techniques that would explode SEO traffic.
I would be surprised if he uses SEO tools much himself. From what I've seen, he's very good at identifying small niches, creating good content, etc. Basically good SEO fundamentals, not cutting edge trickery.
The book is NOT a good introduction to the incompleteness theorem. It is not a book about M.C. Escher. It could, barely, be said to be about papa Bach.
If you read it for math or science, you will be disappointed. It's a horrendous textbook.
Read it paying attention to his words, how and why he choses them, and GEB is a pretty marvelous thing. If the English language excites you, then read it, and read Le Ton Beau de Marot. GEB is a demonstration of ideas, not a discussion of them.
Hofstadter is not a computer scientist. He's a philosopher, a linguist, and a gedankenspiel-smith. Read him to laugh and play. Expect pretension because big words are fun.
Or skip it. I don't think it will change your life.
The second time I read it (somewhere in the 90's), I enjoyed it tremendously but I was surprised by how excited I had been before. The second time through, I caught a lot of additional insights but somehow, it felt less revolutionary.
I plan to read it again in a few years. It's been over ten years since the last time I read it. I have no idea how I'll react to it.
Another book which I did find truly transformative include "The Art of Game Design" by Jessie Schell. Also Anathem, by Neal Stephenson, is also a very worthwhile mind-broadening scientific read. A New Kind of Science by Wolfram is also quite a bit of fun.
But by far my most prized techie book is Genetic Programming, by the legendary John Koza (if you're not a Lisp person like I wasn't when I read this, then you really need to read it!). Braid and all of the books I mentioned have something in common: They are all fat, heavy, meaty, thought-provoking tomes.
Now I read it by jumping between pages and hoping the individual sentences/paragraphs could spark my own thought process (this is how I read most of the time nowadays).
For a much more concise overview on the similar subject matters, checkout this book by Andy Clarkhttp://www.amazon.com/Mindware-Introduction-Philosophy-Cogni...
A Highlights for High School course called Gödel, Escher, Bach: A Mental Space Odyssey. This course has a set of 16 lecture notes and 6 video lectures. http://ocw.mit.edu/high-school/courses/godel-escher-bach/
The undergraduate special course, SP.258 / ESG.SP258 Gödel, Escher, Bach. http://ocw.mit.edu/courses/special-programs/sp-258-goedel-es...
If you're a programmer, then you have a big leg up on the core concepts introduced in the first half, but its still a tough read.
The biggest piece of advice: keep going, and don't be intimidated as the examples grow. There are examples that are drawn from many fields of study, and the dialogues in between chapters give a more intuitive sense of the concepts being introduced in the following chapter. Re-read those if you start finding the main discussions too dry.
There is a _lot_ going on in that book, and you will not get it all on the first read. You will have a feeling that you are missing something and you are. Don't worry about that. Some is revealed in the later parts of the book, and you might find yourself looping back to earlier passages.
Take your time with it, but get through to the end, you will not regret it, and you will find yourself picking through parts of it for a long time to come.
Also, check out Metamagical Themas, which is the opposite, a series of discrete chapters on different topics, but just as fascinating. It covers lisp, rubics cubes, the prisoners dilemma, gender roles in language and a whole host of other good things.
Gödel's Proof is very concise, and more clearly describes the core argument.
I hear there are hidden messages in the book itself. I'm not motivated to track them down and solve them, but this is certainly an indication of the kind of tone Hofstadter was after: playful.
It's very engaging and fascinating, and I highly recommend it for all sentient beings. Admittedly I haven't finished the book just yet, but I hold the belief that I may have been better off not going to college, but instead reading GEB two or three times.
One reason I occasionally stumble while reading it is because it's such a vast flow of information. It's a bit hard to process all of his thoughts at once, as it's basically a well-organized dump of Hofstadter's brain. Reminds me of Pirsig's Zen & the Art of Motorcycle Maintenance in that way.
As for how to approach reading the book, I recommend reading it outdoors in the summertime, which is a bit tricky in the northern hemisphere these days. And don't forget to have a LOT of coffee on-hand!
I'm also in the middle of I Am a Strange Loop, and it feels very familiar. Hofstadter's wit and skill with words comes through strongly, and the technical depth of thought is equally as compelling.
With regards to approaching the book, I found it enjoyable and helpful to stop every few pages and think about some of the concepts that are posed. Don't consider it a book on AI, or computing, or Bach, or Escher, or Godel, or quirky narratives. Instead, just go with it and follow along with the story. It takes a while, but once you've finished, you'll want to read it again.
That's not to say it's necessarily dry or boring, it's just, I imagine your brain has to be on to really appreciate it.
After being told (a few weeks ago, actually) that GEB was a bit more accessible, relative at least to ISL, I started reading it, and have thus far been blown away.
The IRS requires barter value to be reported as income: http://www.irs.gov/taxtopics/tc420.html
and barter exchanges have to send out 1099s: http://www.irs.gov/businesses/small/article/0,,id=113437,00....
You can modulate the 'promiscuity' of this idea, from pairing with random people you meet on some site, to having a handful of people you pair repeatedly with. The latter seems to kill two birds with one stone: you get something done on your site now, and also make progress finding and trying out potential co-founders.
More details here: http://news.ycombinator.com/item?id=1931985
While we're on the subject: I'm a designer / front-end guy always open to bartering. Logos aren't my think but Design/UX/HTML/CSS/HAML/SASS is what I'm good at. I've got a ton of different side projects in tons of different languages I'm learning to hack away on.
I wouldn't call it bartering but knowledge transfer or "mentoring"
And if you think it's not, why on Earth are you paying so much for it?
Don't waste your money. Pay more attention to your studies, and get the most out of it.
And if you're already getting A's and still bored, start doing more side projects. Things that are useful to you or (better yet) someone else you know. Try to write up a spec for the project first, and then work from the spec. Then go back to the customer/friend and see how close the project is to what they really wanted. It's a real eye-opener.
Be putting all of your best code in a portfolio to prepare for job hunting.
But it wasn't an overnight eureka, and it wasn't intentional. I didn't just walk out of high school, pick up a Ruby book, meet Tom and PJ, then launch the site GitHub. Before GitHub came, in chronological order, Spyc, Ozimodo, my ozmm.org, tumblelog, ftpd.rb, Choice, Err the Blog, acts_as_textiled, Cheat!, acts_as_cached, Mofo, Subtlety, cache_fu, Sexy Migrations, Gibberish, nginx_config_generator, fixture scenarios builder, Sake, Ambition, and Facebox. And that's just the stuff I released.
Maybe it's something that nobody else is doing or a tool that you use but think could be better or a way to improve the operation of a suite of tools that could work better together. Maybe it's a group that you're a part of that needs a web site/service for something or a better way to explore their data or automate a tedious process.
It has to be something you're interested in otherwise you won't be psyched to do it.
But ideas are a dime-a-dozen - you want to make it real. I'm sure everyone here has orders of magnitude more never-done ideas, started-and-stopped ideas than out-in-the-world ideas. But generating and playing with those ideas, even if they come to nothing, are part of the means to getting something done.
Take small steps and keep taking small steps. Even with 15-30 minutes a day, you can do something (write a function, write a page, tweak the database). Eventually, though it doesn't seem so along the way, you'll get some place.
1) Find a partner - I've had a LOT of false starts on projects that were sure to be the next big thing. I would get an idea, work hard on it, overthink everything, convince myself it was destined to be a failure, and then start on something else. I watched idly as I saw my ideas implemented by other companies, some with very large exits, some making large profits, and some flops. I invariably regretted whatever reason I had justified to myself for losing steam on it before.
I found a likeminded individual who is motivated, and is good in all the areas I'm not (and better in some of the areas I am). From first-hand experience, it's a lot harder to lose focus or succumb to wanderlust when you have somebody next to you making progress. His progress motivates me. My progress motivates him. We both have skin in the game, and we're both moving forward at a pace I never have before.
The other piece of advice? Cancel cable. My TV broke, and I found myself being extremely productive while I was waiting for a repairman to come out. So productive, in fact, that I called and cancelled on him.
I still get most of what I watch from Hulu or other sites, but now the TV is background noise while I'm programming, and far less of a distraction than something that I needed to leave the room for.
The single biggest thing likely to make you fail is if you lose motivation. Building cool stuff is a way to avoid that.
But, firstly:Understand yourself. Through this you will discover (or strengthen) your interests and passions, and find out what you truly truly care about.
Then figure out how you could apply your skills to improve upon/change/disrupt what you care about. If your care is strong enough, you could do it all day regardless of the "monumentality" of it.
Then later on when its stable and usable consider launching it to the world, sharing the valuable software you've created. (and possibly receiving value back)
In the process of building it, if you get stuck, read/post on HN and go to stackoverflow to ask programming questions, you'll get there.
I really wish they'd put a class like that right after basic symbolic algebra in normal school curriculum - it's far more useful in the modern world than trigonometry.
Math for hackers : http://news.ycombinator.com/item?id=672067
Good books on mathematics for somebody who's only taken high school math? : http://news.ycombinator.com/item?id=299687
Recommendation for (re)learning Math Skills : http://news.ycombinator.com/item?id=1449799
If you want to build up your math muscles (as a good preparation for actually studying maths), you should have a look at some discrete mathematics books (the one I had was "Discrete Mathematics" by Norman Biggs) as they teach you to think in terms of proofs.
If you want to get a thorough foundation for non-discrete maths, you should start with a good (university math) analysis textbook (No idea what's a good one in English).
Another approach you could take is to take a math book that is targeted at physicists and EE people - those usually skimp on the proofs and don't contain enough detail to understand the fundamentals behind it all, but bring you to the interesting (to physicists and EE people) stuff much quicker than a real math course would.
Oh, and if you hang out on Youtube, be sure to watch the catsters - this is category theory, presented by actual working mathematicians, at an accessible level (and with a cute UK accent too).
I recommend The Art of Problem Solving I and II. On the one hand, they're intended for (mathletic) middle and high-schoolers. On the other hand, some of their problems are quite challenging, and much of the material therein is what my school teaches in its intro discrete math courses since very few students learned it in middle and high school.
As for a good broad overview of many areas, the title that springs to mind is 'the nature of mathematical modelling' by Gershenfeld, though you'd better have some decent maths experience before tackling that one - it can be tough-going, but is refreshing in its breadth and clarity.
Assuming that you want to learn some 'university-level mathematics', then you'll really need to be prepared to study and work through problems rather than just read. Mathematics is an area where it's hard to get breadth of knowledge without also having at least some depth because things build very much on each other.
If you really do just want an overview of areas of different areas of mathematics to whet your appetite, there are books by people like Ian Stewart, Marcus du Sautoy and Keith Devlin, all worth reading. Just be aware that reading these is a bit like reading about different programming languages without ever having written a computer program.
If instead you just want to keep your brain engaged mathematically without learning more serious mathematics, there are also plenty of recreational mathematics books out there - Martin Gardner being the name that instantly springs to mind. On a similar vein, you may also enjoy the books of Raymond Smullyan which are more focused on logic.
The only really nice non-textbook taster of university-level mathematics that I have found in Alice in Numberland by Baylis and Haggarty. However it's out of print so you might have problems getting hold of a copy. It is a lovely book though if you can get your hands on it.
Otherwise you are looking at textbooks. I'd recommend maybe 'Introductory Mathematics: Algebra and Analysis' by Geoff Smith as a gentle but rigorous intro to the basics that I'd expect every maths student to learn at the start of their degree course. There are lots of alternatives out there too though. I taught myself lots from Herstein before going to university but that's pretty heavy going and there are better books out there these days. If you look at other books, I'd probably suggest getting one on abstract algebra maybe, covering things like sets/functions and group theory rather than say analysis or linear algebra to start off with, as it's easier to get into the right mathematical mindset if you're not distracted by content which you already have intuitions about.
Are there any good texts that are more problem workbook style? One example that comes to mind is "Exercises in Probability", or some of the 3000 Problems books as published by Schaum.
linear algebra (strang, trefethen, golub and van loan)optimization (nocedal, bertsekas)probability (rice, casella & berger, grimmett)statistical learning (tibshirani, bishop)
A good free online book was recently an HN topic: http://news.ycombinator.com/item?id=1738670
1. Chapter Zero (Carol Schumacher)2. Naive Set Theory (Paul Halmos)
1. Finite-Dimensional Vector Space (Paul Halmos)2. Linear Algebra Done Right (Steven Axler)
1. Real Mathematical Analysis (Charles Pugh)2. Introduction to Analysis (Maxwell Rosenlicht)
1. A first course in abstract algebra (John Fraleigh)
These books are better for self-directed reading compared to some of the classics like Rudin or Herstein. These should keep you busy for a while.
Also, anything by Martin Gardner.
I either need a lot more than just polling (and use CloudKick, Monit, whatever) or if I only need polling because it's just a blog or whatever then I'm not going to be prepared to spend much/anything.
I would work out what your bigger hosted competitors are doing, and find a niche they don't serve. OR, work out the pain points of running self-hosted monit and the like and offer something that isn't just a clone of the existing players.
I would also add a "tour"/"Explore features" type page to explain what the service does - is it pinging, checking the TCP banner on a given port, is it making a request and fetching some content to check it against expected response? Etc. Explain why that is helpful to me.
Don't assume I even know why I want monitoring! Show me what the alerts/reports look like.
One feature that I don't think Pingdom offers (which monitoring software like Nagios has) is alert escalation. (ex. After 5 consecutive timeouts, alert the IT Manager, after 20 alert the CEO). I think there is some value there.
Syntience Inc. is so far concentrating on understanding (written) text in any language but speech recognition is an obvious extension to any competent language understanding technology.
The slideshow on the front page changes too quickly once you get to the results pages. It is hard to see what is returned since it is only up there a few seconds.
How about providing a text box to allow the engine to be tested from the web. I know it is a mobile app, but before installing it I'd like to see if it produces useful results to something I might ask.