Also, I know some TechStars Seattle companies are hiring. These jobs aren't listed on a particular website, but you can check out all the companies that launched in Seattle here: http://techcrunch.com/2010/11/11/techstars-launches-ten-new-... If there is a company you're interested in, I can connect you to the founders as I am friends with alot of those TechStars folks.
TechFlash(http://techflash.com) is a good source that blogs about Seattle tech startups. You can keep an eye on that blog to see which companies received funding. I know BigTip.com just raised $500,000 and they are looking for a "hardcore web dev person".
Founders Co-op is an early stage investment group/incubator. Andy Sack(@andysack), the managing director of Founders Co-op and TechStars Seattle, has a list of his portfolio companies here http://founderscoop.com/portfolio.php. Some of them are hiring as well. You want to follow Andy Sack if you want to get on the ball with the Seattle startup scene. his blog is http://asack.typepad.com.
Hope any of this helps. I'll get back to you if I think of some more.
FWIW - I did this exact thing in 2004 - I am one of the founders of PayScale (www.payscale.com). We (wife+3-month-old) moved from NYC to Seattle after we got funded. The 3 month old is now 6.5 and PayScale is doing pretty well :)
There is a pretty active startup community here. http://www.seattle20.com/ is a good place to start.
There are a lot of startup events going on in Seattle. You can view http://www.seattletechcalendar.com/ to see some of them.
I'd go with that one. Build the MVP(my rule of thumb is, if you cant get it out the door and into customers hands within 90days, move on) and charge them. You'll soon realize that your assumptions were right/wrong about that industry.
That being said, I'd always go for B2B rather than B2C.
I'm not just being cynical here-- I have lived in Palo Alto for just under 6 weeks and my RoR skills are subpar at best. Nevertheless I've been offered multiple jobs, co-founder opportunities, etc. And I'm not even that likable. If you're a nice guy, the opportunities are endless!
That being said, on the off chance that this isn't a troll and you don't have any luck with the replies here that are offering assistance: contact me (see my profile for info) and I'll throw some contracting work your way.
So here's my steps to you for changing things around:
1) Completely revamp your resume, and to stop referring to yourself as unemployed. You were self-employed.
2) write down a list of all the competitors your startup had that are located nearby. Find out the phone numbers/emails to the higher ups in those companies through web searching.
3) phone or email those guys, and say that you are writing a freelance article about the industry. Say you want to interview them for their expertise (all guys love to have their ego's stroked: that's the way to get that introduction you want).
4) during the interview (preferably in person, or by phone), ask them some general questions about the industry, and mention that you had attempted to do a startup in the field but failed. Try to ask questions related to how their business succeeded, in order to compare and contrast with your own experiences. Ask them to give you advice on whether to pursue another startup in this field (even though you may have no intention of doing so) or look for a job in the industry.
Now at this point, it can go 1 of 2 ways. If you're lucky, the other person may see your interest for the field, and ask to see some of your work. If it's good, you will probably move to the top of the pile when a new hire is needed. If that doesn't happen, then repeat as necessary with every other company.
That's a better bet than anything else out there, don't waste your time with the craigslist blackhole
A) If you haven't already, pick up "What color is your parachute?".
B) Work on your resume. It shouldn't say 'unemployed for 6 years'. Mine did not say "unemployed for about 2 decades". Mine listed my education and I told employers that I was a "homemaker and homeschooling mom going through a divorce".
C) Whatever your buggaboo, stop harping on it. Mine was my health. I talked incessantly about my health crisis because I felt I needed to be "up front" and because it was uppermost in my mind...yadda yadda. The very first interview where I did not mention my health issue was the job I got.
I applied to a large company and got a phone call "According to your resume, you qualify for the following three jobs: blah blah morning shift, blah blah evening shift, blah blah evening shift." I knew I was too sick to work morning shift. I replied 'Put me down for the two evening shift jobs.'. I went in for additional testing. Afterwards, I was told "You still qualify for both jobs. Which would you like?" I said "I have no clue what either of these jobs really entails. I've been a homemaker forever..." and we chatted a bit about it. I think a contributing factor to the decision was one of them started two weeks earlier than the other, and that was what I went with.
I still have that job. I feel underemployed and so forth. But it has allowed me to keep a roof over my head, work on my health issues, get through my divorce and start my life over. In the aggregate: It's all good.
Good luck with this.
If you ever want to meet up for lunch at Union Square, I meet with random programmers from the SOMA area all the time. You're welcome to show up and hang out with us. They probably all know of jobs and people hiring, or at a minimum can give you advice.
I'll probably do it the first week after PyCon, but feel free to contact me at my email (if you're smart, you'll figure it out as it's really not that hard to find out how to email Zed Shaw when he has a domain at ZedShaw.com).
If not, then find some way to survive for a couple months and build some simple projects. Like, really simple. Hell, just setup some wordpress sites with good-looking themes from Woothemes or Themeforest. Having 2 or 3 of those will satisfy 95% of people looking for really simple code-monkey work on CL. You won't get rich, but you can build up your list of clients in 6 months. Then you can either keep freelancing or roll that into a fulltime job ("I've been doing contract work for the last year...here are some example projects and client references.")
Of course, you're not interested in internships, or non-programming work. If you have to widen the net, you're giving people a great reason to reject you.
Start your negotiation from a position of strength, and you'll get somewhere. You're starting with surrender--don't be surprised if you lose.
As other people have said: post your Github. Post a link to anything you can about your startup. Start acting like a valuable programmer, so people will treat you like one.
(If it's any comfort, I've been in your situation in another industry. When I started doing what I've written above, rather than what you've written, my life improved dramatically.)
Your post is a good bet, so I upvoted it.
EDIT: I checked your profile. You dont have contact info. A job cant find you.
I don't think it is wise pitching yourselves to companies who are hiring 100K+ engineers saying you are willing to work for minimum wage. It shows a lack of confidence that you are selling yourself so far under market. Pricing is often a signal for quality. More importantly, the cost of a bad engineering hire is far greater than the salary you're being paid -- a bad engineering hire takes time to get rid of, and often produces negative work output. People end up cleaning up a mess, opportunities are lost while a bad engineer flails at what should be simple code, etc. A bad engineer could work for free and still be a worse value for a company than an engineer making market rate. This is the signal you're sending when working for minimum wage.
If you were working on a startup, then you were "self-employed", not "unemployed". Market yourself as such. And as others have already mentioned -- if you can't point at jobs held, then point at code/projects that you wrote. Some startups would rather look at your GitHub profile than a CV.
Having something recent - anything - on your resume is a big improvement on having nothing; having something "cool" that you enjoy talking about is better still. So I'd try that - think about your hobby interests and cast a really wide net to find things you wouldn't otherwise have considered. And use Craigslist.
A four-year degree is a solid leg in for a lot of backwards HR departments (isn't it? everybody telling me to finish mine seems to think so), so I'm surprised you're having difficulty. A bachelor's should at least get you into support somewhere, and you can start there. This makes me think that everybody who can operate a command line has descended upon San Francisco for the startup culture, and there's a saturation there. That wouldn't surprise me at all.
Last time I was there it was to visit my sister and do nothing computer-related, so I might be wrong.
I'm starting a company 4/2 after my last day of full-time work on 4/1, and while I wasn't planning on hiring anyone right away, I do have a fair bit more work that needs doing than I can personally do, so I will be hiring contractors for some of it and if you're a fit, would consider hiring you remotely, assuming your skills matched up and you could handle working remotely (not everyone can).
I suspect you'll find a better offer on HN anyway, but if not, reach out to me with some details mid-month,
You are too self-deprecating about your startup experience. Even if it didn't pan out, you must have learnt a lot, both on the technical and on the business side. You really have to reconnect with your passions and your strengths; if you are aware of your value, it is fairly easy to get the message across to others. What was driving you for so long when working on your startup? What was the vision? That's where your value is.
Don't discount the experience you gained trying to do your startup. As others have said, you weren't unemployed but self-employed.
Secondly, I think you should put your work online. If you've really done website work, why not throw some of that work online for us to see or play with? After spending some time in design school, I see just how more powerful a portfolio can be than a resume. Pictures say a thousand words, and a good code sample or open source contribution says at least as many. :)
To those skeptical of this post, remember we're talking about someone without any job experience. Not even an internship, it sounds like. Being able to code is one thing, but it's often hard to show experience in the "soft skills" of programming without having said you've done it before - from good code commenting practice and source control, to dealing with working for a boss. Hiring someone for their first job requires takes some risk on the part of the employer.
Come to think of it, maybe if this HN post doesn't help, you can consider applying to paid internships? While many internships are just for students, some (especially smaller companies or startups) are happy just for the short-term help - and you might just turn it into a full time gig.
But you might try selling your abilities. Can you demonstrate your failed startup's code?
You're in the business of selling yourself. Try writing about the 'benefits' you provide your employer, not your 'features'. For example: 6 years of startup experience is a feature. Ability to bring products to design-completion/code-completion/market is a benefit. Knowledge of several key technologies is a benefit because you don't need training nor time to get up to speed. Your startup experience means your used to working without much direction, you're used to working hard, you are flexible/resourceful, you understand the role and importance of sales, marketing, and customer service in an organization, and you are connected to the startup network -- a connection your employer could benefit from when hiring.
You should try to present the benefits you feel will maximally impress your future employee.
Get some code posted up at GitHub. You don't need to solve a new problem, just find an interesting way to solve any problem or show your skills off. The are 1000's of data sources out there, mash some stuff together.
Get active on StackOverflow, I've hired a couple of people based solely on what I saw there.
Oh, and if you've worked on anything open-source, or you have any code you can open, make sure you put it up on GitHub so you can show it off. Code talks and bullshit walks, as they say.
4) Market complete websites to small business for under $500 using the technique in (2) above. ....
That said, I'm afraid we're not hiring yet, however -- and no, this is not a shameless plug, but a genuine offer to help -- I can offer you this:
I think you would benefit tremendously from our new startup. The way that we match Opportunity Seekers (such as job seekers, like yourself) with Opportunity Providers (such as employers) should greatly assist someone in your position -- i.e., talent without experience -- to find a new job or even co-founders to build your own company. We're still prepping the beta (having some typical last minute issues) but you should definitely sign up and give it a shot: venturocket.com.
And as defensive as it may seem to do so, I would like to preemptively state that I'm not trying to take advantage of your seemingly dismal situation, but genuinely trying to help you get connected with something. That my desire to help you will of course benefit our startup -- and therefore me -- should not, on its own, in any way invalidate the sincerity of my claim. After all, if it weren't for my desire to create a more efficient way to connect people with opportunities, I would never be doing my startup in the first place.
Besides, I do believe a certain Mr. Smith once pointed out that "[i]t is not from the benevolence of the butcher, the brewer, or the baker that we expect our dinner, but from their regard to their own interest."
Best of luck either way.
Being in the position of interviewing many candidates lately I get truly excited when people want to show me code and examples of stuff they've built, including the challenges they've met head on. Being in a startup gives you many life experiences that you need to address as a strength, whether you succeeded or not. A little secret that should be totally obvious is that no one wants to work with weak, incompetent, whiny developers because your life/project is in their hands when you have to get the job done by the deadline. Your team is only going to be as good as your weakest link.
I will tell you also that the market is hot. I just heard that in the tech sector the unemployment rate in CA is 5.9% compared to 12.3% for the entire labor force. So in actuality you'll face less competition finding a job in the tech industry currently than you will at fast food, etc. At my current company (in the Bay Area) we have a hard time finding good people locally, and I hear this same thing from many people at other companies. There is a very competitive job market (between companies) here and my employer is paying us handsomely if we can bring in a good new hire.
In addition I'd say play to your strengths. If you're an okay back end developer but excel at front end then apply to these positions or vice versa. Think of the hiring process from the other side of the desk and you'll be sure to land an interview.
- You don't get a programming job by applying at In 'n Out.
- Reframe your pitch. You need to signal to employers that you're worth hiring; "Hire me, I'm desperate and barely competent" doesn't really push that message.
- What's "real" job experience? Did you write code for 6 years, or not?
- I'm out of touch with what junior engineers get paid (hopefully it's less than $100k), but I'm guessing your friends have accumulated track records over the past few years and are in mid- to senior-level positions. I don't think you're likely to get one of those given your history (to say nothing of your self-presentation). If that's been your target, maybe aim a little lower, at junior-level jobs? Still difficult since there are so many junior engineers.
- What everyone else said.
When presenting yourself as someone of value, remember that it doesn't matter if you believe it. Just say it with authority. =)
Here some cool things you could do (some of which i'll have to do myself):
1.) Put your resume on Google docs NOW. Repost it from here. Make it a living document.
2.) Get a Google sites account. Possibly put up examples of your programming knowledge (essays?). Point your name.com to it if you can, otherwise make sure the site is sites.google.com/yourname
3.) Get a github account. Push your work up (even if it is only examples of your knowledge)
4.) Contribute to FOSS projects, get to know the committers and make contacts.
5.) Check out some freelance sites and as I understand it you could probably undercut a lot of these people. This might be some added experience you'll be able to add to your resume. After several jobs your resume should look a bit better.
6.) Good luck chap! Give me your twitter account so I can follow and RT. :-)
I may have to work as hard as a start-up founder but at least I get a nice pay packet and none of this '6years out of college with no career or anything to show for my efforts'.
I don't get why people spend years coming up with crap start-up ideas, failing, then trying the same failed recipe again. I wouldn't try and take something to market unless it was really hot. Your average web 2.0(crap) is just a waste of everyone's time. You could have been working your ass at a big consultancy or trading firm as a technologist in that time and made yourself some good money whilst actually having a life that doesn't involve ramen noodles.
I am working with a couple of startups and everyone is desparate for talent. I know many that would give a week or two with some small jobs to try you out.
That being said. Get some code samples out somewhere. Post a link to your failed startup. There may be another startup working on a similar or related idea who could integrate parts of your code and give you a job.
It is cool that you have a BS in CompSci but to me that means nothing. I know many people who have one but cant code for shit.
Let us know you can actually code.
Contact me and I will see what I can do to help you out.
Can you speak Hindi?
It sounds great but it's edgy/new enough for you to need to do a small test run first to refine the idea. And you'll find it hard to sell without having the experience under your belt. It's one of those "meh, sounds weird" ideas that just needs some momentum before people will be won over, IMHO.
- People might not like it, but part of hackathons is the social side: meeting hackers and other like-minded people. Meeting them online you can do anyday, wether it's on HN, Reddit, Stackoverflow or whatever else.
- The woah, they're doing something, i should too" feeling. You can partially copy that using desktop streaming and that stuff, but still it's too easy to just walk away from it, when you're not around those people physically. For exactly the same reason as why people are so much ruder online than that they are in real life: you don't see the people on the other end. Introduce webcams, you might say, but still I don't think any virtual connection can fully replace the feeling of a Hackathon.
-It's also way too easy to cheat. Fair enough, it's quite easy to cheat at Hackathons anyway, but again, people are ruder online than in real life, and thus more likely to cheat.
Okay, it might turn out to be a nice little event for a bunch of people, but I don't think it'd come anywhere near a "real" Hackathon.
There are couple of hey things that have to be taken care of:
-cheating ( by announcing a topic couple hours before event starts )
-getting media sponsors ( preferably startups with API' )
-presentations streamed ( justin.tv/ustream etc.)
-progress written up ( like http://www.travisglines.com/web-coding/lets-make-a-twitter-c...)
-possible prizes via AppSumo or similar venue
I`ve been actually thinking about putting together such a event in the next couple of weeks.
Since I`m launching a website in exactly that area soon, check it out in my profile.
However, in the event that you do need caching, it can be achieved through a variety of means, including ORM level object caching, controller caching and/or view/fragment caching.
Lastly, have you read this guide on Rails caching? Much of this is readily available in the standard distribution of rails: http://guides.rubyonrails.org/caching_with_rails.html
(final thought â€" this is a question might have been better suited for StackOverflow, just given the manner in which SO and HN are geared.)
HOWEVER, I would suggest that your fundamental assumptions are wrong here. Without a cache, PHP has to re-interpret the source files for every single request. That's not how Rails works: the code is parsed once at server startup (or the first time it's used, depending on which part of the code you're looking at) and reused in the same process for subsequent requests, so there isn't a per-request parsing cost.
As ever, benchmark and profile before making optimisation assumptions.
That is the case of bytecode caching. In regards to other forms of caching (etag, memoization etc) frameworks implement different strategies.
I think it's a great idea, actually. At BSA we've been talking about newsletter ads for a while, but haven't been able to commit to executing on it properly. We went as far as acquiring the NewsletterAds.com domain, but have since stopped there. One of the biggest hurdles with selling ads in newsletters is getting enough valuable inventory. Even with our existing publishers (and with 150-200 new sites submitted every day) we would struggle to have enough meaningful inventory to put together to sell. That being said, I had many people tell me the same thing before I started BSA - that I would never be able to get enough inventory together to make it work.
The other piece of advice I can give you is that operating at 25% commissions (like BSA does) is definitely a bootstrapping path. If you can sell ads in newsletters that they aren't already selling, then it's something I would do at a 35-40% level. Maybe that sounds crazy, but if you're able to make sales that are normally not made you can charge whatever you want.
So, I'd say go for it, hustle, and make it happen if you are passionate about it.
Publishers are also (usually) particular about what kind of advertising they run in their emails. They want to make sure that it's "on brand" because if it's not then people might stop opening or reading their emails.
It's the classic problem of the 2 sided marketplace but the easiest way to start out here (IMHO) would be to find a newsletter or two and go out there selling their inventory. When you're oversubscribed go and find another relevant newsletter and sell their inventory. Wash, rinse and repeat.
To validate, I'd find a newsletter(s) you think you can sell an ad(s) in and talk to the newsletter creator and say "If I can get you a sponsored ad for $x, would you (1) want it and (2) give me a Y% cut?"
If you get positive response from them, then try like mad to sell the ads you promised.
I'm not sure the size of the market but given how much Bob Pittman, Lerer Media and the guy at HARO like email newsletters, there is prob something here. We think so.
Also, IMO, I don't think startups is a great demographic from a monetization perspective unless you can slice it more finely, i.e., venture-backed startups or startups who are hiring.
It feels like you're looking to get involved in an industry that's being disrupted (unless e-mail newsletters are going to continue in their current form, which I don't believe), but that your idea isn't causing this disruption. I feel like there's a pivot somewhere here, after some more time on it.
So in essence, I'm giving you the opposite of what you want; I think if you start looking into this further, you may hit upon the true solution. At least it sounded to me like you had the knowledge and interest to make it happen.
I'm not going to be able to shoot down an idea this specific, Content Newsletters are. Find a few. If they think its a good idea, see if they'll pay you something, or even trial some stuff for you. You should be able to quickly determine if there's anything here worth pursuing.
HeyAmigo sounds like exactly what you are talking about. It was built by Carsonified a few years ago and sold (I think). The Bare Naked App blog was a chronicle of them building it.
I actually have been thinking about this idea for a while and would love to chat more about it. I've been working on a travel industry startup for 2 years that has had a difficult time finding great/targeted advertising opportunities.
these problems don't seem like ones normal people deal with. they're just problems for people trying to add something to their domain squatting businesses. spam my inbox with lame content, and then spam the newsletter with ads? ugh.
how about, people want really good content through email (huge assumption), but great content publishers aren't publishing content due to low advertiser involvement. the service could hook writers up with relevant advertisers who could add something to the conversation, giving the user something other than a text ad or banners. if it's a small market, the service could be very specialized and deal with people/advertisers individually.
but honestly, there's probably more money in viagra ads than there is in email newsletters.
For distributed systems there are two main things to learn from: good papers and good deployed systems. A researcher named Leslie Lamport invented a number of key ideas such as Lamport timestamps and Byzantine failure models. Some other basic ideas include quorums for replicated data storage and the linearizability consistency model. Google has published some good papers about their systems like MapReduce, BigTable, Dapper, and Percolator. Amazon's Dynamo paper was very influential. The Facebook engineering "notes" blog also has good content. Netflix has been blogging about their move to AWS.
Every software engineer needs to manage complexity, but there are some kinds of complexity that only show up in big systems. First, your system's modules wil be running on many different machines. The most important advice I can give is to have your modules separated by very simple APIs. Joshua Bloch has written a great presentation on how to do that. Think about what happens when you do a rolling upgrade of a 1,000 node system. It might take days to complete. All the systems have to interoperate correctly during the upgrade. The fewer, simpler interactions between components the better.
The best advice I know of about operating a big distributed system is this paper by James Hamilton. I won't repeat its contents, but I can tell you that every time that we didn't follow its guidelines we ended up regretting it. The other important thing is to get really good with the Unix command line. You'll need to run ad-hoc commands on many machines, slice and dice log files, etc.
How did I learn these skills? The usual mix of how people learn anything - independent study, school, and building both experimental and production systems.
2. Remove bottleneck.
4. Every once in a while, make a bold move to throw something out that can no longer work that way and replace it with something more scalable. But while this is important, it comes up less often than you might think.
The difference is that you spend a lot more time in that loop than a desktop dev, but if you understand programming it isn't a special black art until the very, very top end.
The other thing to get is that it's always about buying time rather than solving the problem forever. The goal is to have bought enough time that you don't have to be stuck in a local optima or make panicked decisions.
But, nothing beats working directly with geniuses. Earlier this year I made a change (at my last company) that increased the number of simultaneous users by well over an order of magnitude. The change was known and had been tried by others in the group, but was deemed infeasible. I didn't come up with the magic change needed, I found how to apply it. And what I learned in the process is applicable outside of that. Without working directly solving the problems, it's hard to learn how.
In '06 I joined a startup and we needed to scale. I hadn't had experience with this stuff and neither did most people on my team...so here is what we did.
* Try new things, but basically find out what most people are doing that have already gone down this path (stand on shoulders of giants, as someone mentioned)
* Read, read, more reading...talking to other devs...network...DO NOT REINVENT SOMETHING (I also call this the Kiss of Death). Unless you are Google, Amazon or Facebook, use off the shelf if you can.
* Use technologies that will work for your problem. We chose Erlang for ours b/c it of what we were doing. Something like Java would have worked, but would have made the job 10x harder. C would have been ideal, but we would have to reinvent nearly all of Erlang, so just choose Erlang.
* LEARN about things like good architecture design, SOA and failure (when a system goes down, what happens...).
*Invest in a good test suite or test infrastructure, but realize that it will be nearly impossible to test at scale.
During that time I felt like I was constantly reading every paper I could find, blog on scaling and back-end systems and talking to every dev or had ever done it. It was work, but not the type normally associated w/ dev....but was 100% worth it.
Tl;dr: in 1998 I created an mp3 search engine that got significant traffic, had to learn on the fly, ended up going to Inktomi where I joined a team tackling much bigger problems. We all learned a lot over the next four years.
Don't get worried that you won't be able to go in and run the show on the first day. There isn't any secret sauce, and sites that scale to this level are so rare that they probably each have their own arcane and complex way of doing it that has evolved over years of people trying different approaches and failing.
Anywhere that is worth working isn't looking for someone who knows how to scale a website to millions of users, they are looking for smart people who can contribute. Their development budget is probably in the millions of dollars per year, they will be more than happy if you can help.
TLDR; Nobody is going to write a book on this, since only 500 people in the world would benefit from reading it. There is no single answer.
To address the specifics of what you are asking, there is basically a balancing act of consistency vs performance. You need to find the exact balance that is 'good enough' for every problem. The oft quoted 'there are two hard problems in CS, cache invalidation and naming things' pretty much sums it up.
You are fortunate that you live in the age of cloud computing. For instance, you can spend $10 for a day and get access to more compute resources than most people could hope for after months of budget proposals.
Find a problem, solve it, launch it, test it, find bottleneck, kill it. Repeat this enough times and you can start to a feel for where bottlenecks will happen and how fail happens.
The best news is that these days, you can build up these skills using a $1k box with Linux or BSD. Years ago, you needed to get a job first because systems were in the order of $millions and they wouldn't fit in your average spare room.
You'll also need to demonstrate so CS/SE chops, because mucking up a big back-end system is not like a web page that occasionally crashes, it can cost $10k's per hour while it's down.
Can you take a moment tomorrow and add an edit to your post giving a summary of whether you felt the comments answered your questions?
I ask simply because my first read of your post focused on "How do I get there?" and not "what was your path?" As such, I was surprised to be reading life stories of fellow HN'ers. Since we all absorb info differently, I'm curious to know if the stories helped and what you gleaned from them.
All the best in your endeavor. -- A fellow large-scale enthusiast.
You can run 1000 servers for an hour on Amazon for fairly cheap. If you use that to do some testing/benchmarks etc. of popular nosql systems, for example, and then write about that, you can create some notoriety in the big-systems world fairly fast.
When you discount "learn on the job" and "read books", i'm really not sure what's left, or what you expect the people who have achieved success by doing these things to tell you (while omitting those things.)
If I were doing a consumer service, it'd be a no brainer. However, I'm working on infrastructure/security technology, although with some cool demos, and I'm not sure if being a YC startup would help in getting meetings with fortune 50 CIOs or various defense/government agencies.
But in all seriousness, I'd love it if someone would consider taking a glance at our application. People who should know have been telling us we're on to something, but I worry that we're just not communicating that effectively. I could pledge to eat during the feedback process if that helps.
Are there any tentative dates or thoughts on what day of the week this might happen?
Best of luck to all who take advantage of this offer! :)
Any alumni up for a weekend in Vegas? Me and my co-founder will show you around town. :)
(Edit: if you felt like making another worthy donation, the Youth Guard mailing lists are the people I'm referring to -- http://www.youth-guard.org/youth/ . I cannot overstate the impact they had on my life.)
You'll need to save a text file. I think you guys can probably manage, but to make it copy/paste easy:
email@example.com (tab) 25.00 (tab) USD (tab) winsocks_rocked (tab) This is a totally optional comment.
Thanks for Winsock, by the way. You saved me hours of frustration when I was trying to get Compuserve and Warcraft 2 to work together, back in middle school. Crikey I feel old.
Thanks all... I had honestly thought the Internet had forgotten about me.
Actually, they'll sometimes do that on accounts that are a decade old, but new accounts especially.
Maybe use WePay instead with a target amount?
Nevermind, in 1993 a single license for Trumpet Winsock cost $25 usd. Adjusted for inflation that is $38.10 today.
Thank you for my career.
I've run open source projects, built e-learning systems, helped charities in Colombia work together, worked with people revolutionizing journalism and (once, by accident) made a large number of Utah Mormons very angry. None of this would have happened without the software you created. Thank you.
I don't have a PayPal account, and I'm trying to navigate their site to find out how to do a donation, but I can't find anything like it? The closest match is making an "International Payment", is that the one? And why do I need to select which country he is in?
Or should I sign up and perform some other action when logged in?
I've sent them an email referencing this story to see if they step up and at least make a donation.
Would be great if some more people could email them as I don't see them taking a random email like I've sent seriously.
EDIT: Demon internet is an ISP based in the UK.
Pat yourself on the back and know your efforts were useful for a great many people. Well done, good sir!
Fondly remember Trumpet as the key that unlocked the door to using Mosaic. Jumping from text only to a browser was like going from black and white to technicolor.
Later on, after saving money to upgrade to a whopping 12MB ram and Windows 95, that same computer allowed to to play multiplayer Diablo, which was my first taste of IRC. Naturally it was all downhill from there, and I played Diablo for two years straight.
There were a lot of fights in our household over phone bills and busy dial tones, and I'm sorry that my sister was left stranded at school with no ride because I was busy downloading FreeBSD, but now I'm a successful software engineer and budding entrepreneur in the education space, and it's all thanks to those formative moments panicking at 3 am, trying so hard to muffle the sounds emanating from my 9600 kbaud modem as it connected me to an exciting new world.
Thanks, Peter. Thank you so much.
Even though I was kicking around the net on my Macintosh SE/30, using MacSLIP/MacTCP, this is a great idea.
It might help to get the message out to a wider audience.
Shameless plug: This is a part of my Internet Startup. You can opt in to have your name (or alias) published.
I probably would've gone into this field without it but I got a big head start regardless. I'm donating.
I should probably send some money my parents way too. Long distance modem calls weren't exactly cheap back then!
Knowing Linux at the right time (1998) was how I got my first job.
Thank you for opening up the online world to me, back in the days when just trying to connect to the Internet was a bit of an adventure!
Thanks, Paypal, I didn't authorize that. I do not WANT you to lock my account, or have anything to do with you and your freezing account policy crap. I just want to donate to worthy causes.
That said, I'm in Finland. US-Only solutions don't work for obvious reasons (among them, outside the US we don't have 30-day-waits for check cashing...) so I'm looking for a way to set this right that I can use here.
Check out the campaign at http://bit.ly/fDzVOF
Make a donation but, at the very least, share it with your friends so that we can get Peter some of the money he deserves.
Tell us about your business or at least your skills, something. This sort of post comes by about every day, in some way or another...
Wow what good advice.
1. Facebook can be knocked off their perch. Facebook almost certainly will be knocked off their perch, probably sooner than later.
2. The "net crowd" is very much a trend-following herd... if something catches the attention of the right set of early adopters and the avalanche starts, it'll carry through to its inevitable conclusion.
3. You won't beat Facebook by building a better Facebook. Nobody cares about something that's just like Facebook but a little better or has a couple of new features. One killer new feature, maybe. But what?
4. Facebook is not cool anymore. Facebook is a utility, like the phone company or the people who provide your electricity.
5. The way to beat Facebook is to build something that is new and unique, but subsumes (most) of what Facebook does. Think telephones replacing the telegraph. A telephone isn't a telegraph, it's a whole new tool, but it obviates the need for the telegraph.
6. Remember what Henry Ford said "If I'd asked my customers what they wanted, they'd have asked for a faster horse."
7. Go back and find and read Om's article about how "social networking is just a feature." That vision is partly coming true, but Facebook is fighting to extend their tendrils into every other site, rather than letting other sites implement their own social networking features and (possibly) combining them using open standards to build a federated social network.
8. Relative to (7) above, see: http://www.w3.org/2005/Incubator/federatedsocialweb/ and also research what Appleseed, Diaspora, etc. are doing. There may still be a chance to gain some traction for this federation stuff. That would open up some interesting possibilities down the road and could disintermediate Facebook.
9. I'm going to guess that whatever replaces Facebook will have a basis in the mobile app world, first and foremost, not the traditional web world. The smartphone carrying, app using early adopters will latch onto something cool that comes along...
10. Your mom, your grandma, your uncle, your boss, your ex-wife, your ex-girlfriend/boyfriend, etc. are all on Facebook. Your neighbors dorky 8 year old kid is on Facebook. The nerdy guy in Chemistry class who's always undressing you with his eyes, is on Facebook. Facebook is generic and boring... it has utility because of network effects, and because everybody is on it... but it sucks and is lame and isn't cool because, well, everyone is on it.
11. It's cool to hate on Gladwell, but read The Tipping Point if you haven't already. Then chase down some of the stuff by Watts, Barabasi, etc. on network science. Maybe even read Diffusion of Innovations by Everett Rogers. There's a growing body of science that speaks to how things happen in networks... there may be something interesting that falls out of thinking about "preferential attachment" and power law distributions and scale-free networks.
12. Also, go read this old Jamie Zawinski piece: http://www.jwz.org/doc/groupware.html Keep this bit in mind:
That got me a look like I had just sprouted a third head, but bear with me, because I think that it's not only crude but insightful. "How will this software get my users laid" should be on the minds of anyone writing social software (and these days, almost all software is social software).
IF I had to bet money on any of this being relevant, I'd say (4), (10) and (12) would be the most likely to be so. Facebook just isn't cool anymore. At least not cool for specific niches, like, say, "teenagers" (what teen wants to be on a social-network with his mom and dad, or his geeky little sister, etc?) or college-students ("eeeew, high-school kids!" "eeeeeew, OLD people"), etc.
They have an advantage for a little while, then someone bests them. But no one has figured out how to build a rolls-royce, goyard or even coca-cola internet service yet.
(I was pretty pissed with the way Google launched Buzz, but they seem to have at least somewhat learned that lesson, and I don't want to see them disappear from the space altogether.)
I guess I should just fire it up, and save locally any threads I find particularly useful.
100 unique visitors is very little. I don't understand why you're paying 175$ a month.
You will probably save more money by finding a cheaper way to host these videos than by trying to convert 100 visitors a day.
But it all depends on the specifics of course. Can we see the url?
Looked at another way, the tech is available and certainly cheap enough (and somewhat "obvious"); if it were advantageous, you'd hear about loads of people doing it. The tech has been out for years, and even in the early days they were well under $5000 (way, way under that now). Another thing to note, the bulb projectors dim over time, and the bulb replacement costs are not insignificant if you replace them at the point the picture quality starts to suffer (as opposed to when they completely burn out).
Walk into any company conference room and try it out. I predict you'll hate it.
I've tried a similar setup in the past and found it too be just too much work. It turned into lots of head movement. If it was about 4-8x the res then maybe it might work as you could segregate it into 4 or 9 workareas and just focus on one at a time. But it's simply too low resolution to work for that right now -- you'll end up moving so far away from it that you may as well just get a big monitor and a desk.
I'm tempted to take up instakill's suggestion posted here.
I'll download and hopefully install/config it on one of our spare domains early next week. If I do, I'll post the URL on this thread.
It's almost impossible to get a significant raise while staying in the same position.
Salary is NOT based on merit.
In your case, your best chance is to get an actual job offer from another employer, be prepared to walk away from your current job, and then talk to your boss and tell him you have a much better offer and are leaving, unless he can promote you into a new position (you can just make that up), where you make much more.
However, a few years of experience at a large shop can facilitate that jump.
Related discussion on negotiation / salaries:http://news.ycombinator.com/item?id=2201407
Assuming that "average" refers to median, half of all people earn less and therefore there is a significant chance that you may never earn it.
It's all user generated and breaks the pay down into salary, commission, bonuses, etc.
Nico has done several excellent designs for our startup.
I will working on pulling together a bit of information for you before contacting so that we can discuss your interest.
There are many engineers around me who choose to work very long hours and weekends, but I never received a reproach or a scornful glare for not being like that.
I turned down an offer from a big investment bank (after working there for few months) and now joined a company which I can say is just average. For me I wan't to keep a work/life balance. Wanted to give time to myself as well few side projects. Staying in former would've required too much commitment.
But here's the lesson I learned, no matter what company it is they will ask for same amount of time commitment. Only difference lies in the type of work they assign to you. So it is good to be in an awesome company so atleast you can work on some challenging assignments.
I've been recommending Zed Shaw's "Learn Python The Hard Way" a lot lately. The way it's structured makes it suitable for a pretty wide range of skill levels, as someone with a bit of prior programming experience can just go through the exercises they understand more quickly, learning the Python syntax along the way.
So even if as you say you won't have any problems learning the language, it's still a good way to do that, and once done, you can learn a lot more from the docs, reading code, and other books.
If you don't have a programmer friend you can lean on Seven Languages in Seven Weeks by Bruce Tate will give you a nice overview of some good languages, so you can pick one that fits your way of thinking (or learn multiple languages and pick the right tool for the job for each project). You could complement that book with a nice Python primer, because this language (which is a personal favorite due to the nicely readable syntax)) isn't covered.
If you already know a bit of Lisp Clojure would be a nice match. Also, Python and Ruby are pretty much the default suggestions when people ask this kind of question. Personally, I wouldn't worry about the language choice, as long as you go with something that doesn't encourage bad habits (e.g. don't start with PHP).
You can't go wrong with really any language to get your feet wet. It's really a matter of finding documentation, books and a community you resonate with to keep your attention and get you excited about all of the possibilities.
If you're looking for a blog, I would advise you to look into wordpress or similar and avoid re-inventing the wheel. Save your creative energy for making something fun/interesting.
Academia.edu helps academics follow the latest research in their field. Here are a few bullet points that sum up the atmosphere in our team:
- obsession with exceptional engineering
- obsession with building a great web product, and a great user experience
- intellectually inquisitive - we like delving into ideas, whatever the ideas are about
- fun and friendly - we enjoy each other's company a lot, and have a great deal of respect for each other.
We are hiring intern engineers. Here are some of the technologies we work with: Rails, Nginx, Node.js, Redis, Memcached. We are based in downtown San Francisco.
More information about the team, and about how we think about software engineering and product development, is here http://academia.edu/hiring. Specifics on our developer internship program are here http://academia.edu/hiring/developer_intern
We're trying to change the way personal history is recorded. Right now, we're focused on letting families and friends remember the lives of those who've passed away.
If you're interested in working for a small (but very well funded) YC company in SF, get in touch with me at firstname.lastname@example.org.
(RichardPrice, please add this to the post?)
We're a sustainable fashion start-up that has a full time developer but could use some tech help. Our fabric is made from denim factory scraps. It would be a good way for a programmer interested in business to learn marketing (I've learned a huge amount over the past 8 months).
Just shoot me a message at email@example.com if you're interested.
We develop solutions for searching and analyzing vast quantities of semi-structured data. Many of the biggest tech companies (Cisco, Qualcomm, Juniper, Motorola) rely on Pattern Insight for their internal search.
Many of our team members joined the company after working part-time or as interns
Nest is building a very exciting product aimed at energy consciousconsumers. You'll work with seasoned veterans of the consumer productsindustry who have a proven track record of bringing products tomarket.
We're just getting started and are still shopping technologies. Partof your job will be to figure out if these are the right ones: Chef,Cassandra, Hive, Hadoop, Nginx, Netty, HornetQ, Node.js, EC2,S3, ZooKeeper.
We're looking for talented software developers with a passion forbuilding amazing products for real customers. Join us!
Contact me at firstname.lastname@example.org for more details.
Curious Minds brainstorms business ideas with the potential to shake up the status quo. As a technology incubator, we whittle sophisticated algorithms into simple, intuitive solutions. Our businesses have landed partnerships with Fortune 500 companies and nationwide press from ABC, CBS, CNN, NPR, Fox TV, KCAL 9, Good Morning America, CNET, Esquire, and USA Today.
We're seeking an assistant to perform routine business development tasks. You should be tech-savvy, outgoing, and eager to get the job done.
Responsibilities: - Transfer data from online databases into spreadsheets - Actively seek new accounts through cold calls, emails, and faxes - Research and write answers to support healthcare technology projects - Resolve issues throughout the project cycle - Develop new marketing collateral - Write emails
Qualifications: - Consistent, reliable, hardworking (e.g. we can count on you to show up and produce accurate work) - Superior organizational and time-management skills - Good writing and communication skills - Ability to adapt in a rapidly-evolving entrepreneurial environment - Positive, easygoing, nice, fun, smart, low-maintenance
Benefits: - This is a paid (hourly) internship - Has the potential to develop into a full-time position as an early employee in the company - Exciting work environment that serves as an entrepreneurial training ground - Assist in driving and managing one of the fastest-growing startups - Kitchen filled to the brim with delicacies - Beautiful office in the middle of Beverly Hills
Small startup, self funded, fast moving. Feel free to email me at jon at the domain above for more info!
You can email me at email@example.com with any questions you have.
We mostly work with Ruby on Rails but also have a new project in Node.js. When something is a better tool for the job, we use it and if you come and convince us that it's the case for a part of your project, we will listen to you.
So if you're interested, send an email at firstname.lastname@example.org
(though it doesn't list it, we're hiring interns).
Blackberry, iOS, Android, or Ruby experience is a huge plus. If you've got the hacking spirit or some projects on github, let us know!!
Keep up with your friends and discover new places, with Gowalla!
cough I'm seeking an internship for the summer. 2 semesters away from a BS in CS. Just got my first 'fun' test app onto the iOS market, cloudedbox.com/supersoaker.html. I'm still working on the proof that I'm worthy, but I cannot tell you how much I'd like to experience the techniques and tribulations of software engineering with a company anywhere in North California. More about.me/cameronbriar uncough
"We are a security research and consulting company that is fortunate to work on some of the most interesting software products and problems in the world. We are looking for motivated students to work with us as a paid summer intern."
We perform security assessments and penetration tests for large enterprises. If information security sounds exciting (and you can work out of Carpinteria--about 90 miles north of Los Angeles), send a cover letter and resume to email@example.com!
We are a San Francisco based startup changing the way people use transportation. We have both paid and unpaid internships available and can provide transportation reimbursement for interns looking to commute to the city.
Shoot me an e-mail at firstname.lastname@example.org if you're interested.
I'd be happy to answer any questions (I'm an intern :), email in profile.
Remote working is not a problem. Ping simon email@example.com directly if you are interested in finding out more.
Come say hi :)
Come help me build me be cool stuff!
We're creating the best way to find and buy outdoor gear. If you're a great hacker and you love the outdoors, check us out.
Proofpoint, Inc. is the leader in SaaS eDiscovery, Compliance and Security. Proofpoint focuses on the art and science of cloud based email security, archiving, eDiscovery,and compliance solutions.
The following internship opportunities are available - Graduate Student Internships:Marketing Intern Web Production InternProduct Manager InternProduct Marketing InternPublic Relations Intern
Undergrad Internships:Software QA Engineer InternSoftware Development InternSoftware Engineer - Encryption Services InternSoftware Engineer - Spam Services InternSales Operations Intern
Learn more about Proofpoint and visit us online at www.proofpoint.comand submit resumes to firstname.lastname@example.org
Want to create a model-based test for our platform layer (in Ruby)? Want to create an AI to combat our back end Java "director" AI (yeah, in Java, of course or tell us how you'd rather do it)? Want to test render code (as in "game dev" sort of render code - perf-sensitive code that grids out video and sync'd audio to the limits the hardware will allow)? Do you hate "the cloud" (Amazon's in our case) and want to show everyone how fragile that is? Well . . . I would welcome an intern who wants to understand any of those things deeply and break dev code. So pick one and tell me how you want to break it.
The company supports open-sourcing your test code. Share it. Put it on your resume. Put us on your resume!
I only want someone who wants to blow up and/or set fire to and/or just do horrible, horrible things to the dev code.
My name is Drew. I break things for a living.
You? Write code and want to SMASH things? Obliterate them? Pulverize? Have other destructive fantasies but don't want to talk about it? Ask for me at email@example.com with the subject "SDET Intern".
Go the bottom of the page: http://receivablesxchange.com/about_us/careers/index.html
The internships@ address goes directly to me, so if you mention HN, I'll be sure your resume gets to the right people.
EE and CSE - please send me your resume!
Relax. That's true for 99% of all programmers.
Eventually I plan on going back to a real University and getting a CS degree
Absolutely not necessary. You will probably learn more building anything than learning it in school.
I'm starting to think I may have a learning dissability
Maybe you do, maybe you don't. Just because the rest of the world is quick to diagnose everything doesn't mean you have to.
I have come to accept that I'm really not smart. I'm slow, forgetfull, concepts never seem to stick
Your performance shortcomings could be for many reasons. Being "really not smart" is the least likely of any of them. They are much more likely caused by other things like uninteresting work, poor environment, personal issues, nasty people, or even health issues. Whether you're "smart" or not, thinking that your aren't is pretty much a guarantee for failure. Please don't do that.
I have started going through the basic Algo's and Data structures again with a basic Java book about algorithms
Sorry to say, but you're just doing it the hardest way you can. You don't need a book; you need a project. I (like many others here, I'm sure) have achieved much, but have always had difficulty learning from books and theory. It's hard! You need to find work where the things you need to learn will be required. Funny how quickly and easily you'll find a way to learn them when you actually need them. I'm not sure how you should go about finding such work, but I imagine many responses in this thread do.
I just don't want to be a cargo cult programmer anymore.
Good. That makes your normal.
And finally trying to memorise all those linux commands I ALWAYS forget.
Then use less commands. I have never used more that 10% of what was available in any technology and I always got the job done.
I have to force myself
This is the most important thing you have said.
Have you ever actually enjoyed building stuff? Have you ever gotten really "jazzed" about the project you were working on? Have you ever leapt up out of your seat and danced when you got something working?
If you answered "yes" to any of these questions, then you really do have the passion to be a programmer. Stop selling yourself short and listen to the great advice you're sure to get here from fellow Hacker News'ers.
If you answered "yes" to none of these questions, then there's no sense for you to continue wasting your time searching for the passion. If you haven't experienced any by now, then you probably never will. No one should have to "force themself" to love what they're doing. Find something else.
P.S. Sorry about your father. Loss affects each of us differently. And don't worry about your English. It's fine. Please give yourself your best chance to succeed and keep us posted. Best wishes.
When I wanted to learn C, I bought six or seven books, some of which came with a compiler. I read each book.
Now that probably sounds like I am a genius, sucking down information directly from the text. But what really happened wasn't so flattering at all: I flailed. It wasn't until the third book or so that I finally got anything to compile, and I think it was book 4 where I figured out how the hell to read pointers.
I really sucked at learning programming.
When I picked up C++, we were on a family vacation. The kids all played in the pool and did fun stuff. I sat by the pool and read C++ books. If I thought C was tough, C++ was a killer.
I finally got it, though.
Last year, when I wanted to finally learn Functional Programming (I'm 45) I did the same thing. And this time, guess what? Even after the books I sucked.
So I started writing little projects, which also sucked. I went back and read the books again. I wrote some more code. I still suck at it, but I suck a little less. Perhaps in another year or two I'll consider myself proficient.
Yes, it is terribly awesome to sit down in front of a client with a tough problem and do some wizardry on the screen and feel like the hero. I spent my 20s and part of my 30s being the super-hero star guy. I had a blast.
But that's just hot-dogging: showboating. (People do it for fun and to make their job more like a theater performance) In reality for every one of those times I was showboating there were hundreds of hours spent trying to figure out what the hell was going on with something.
I think it might be easy to look at other coders who are like I was and get the wrong impression. Yes, some folks are smarter or have a better recall than others, but guys with huge recall ability many times get wrapped up in some kind of minutia that's not important to the team. Everybody has flaws. This will sound very strange to hear, but it's true: you can be the worst programmer on a programming team and be the most valuable and critical person there. I've seen it happen dozens of times.
The question is: are you working at making yourself better? Not how smart you are, how you feel about programming, or any of that. Just a simple question about what kinds of habits you have in place to continue to improve. If you have those habits, you'll either become a better coder or eventually work out what you're meant to do. But you have to have those habits first.
So my advice is a little less angst and a little more work. Both to you and me :)
EDIT: By some kind of weird twist of fate I have been thinking about this a lot recently, because I was writing a review of the best book I've ever read that improved my coding, Code Complete. http://news.ycombinator.com/item?id=2263127
You have built up this idea in your head that other people are smarter than you, and you aren't worth anything if you aren't like them. Never mind that you're a working programmer and that you're proficient in a second language. Apparently for you that stuff doesn't count.
To "fix" this problem you are forcing yourself to do stuff that you don't seem to like. When you fail you blame yourself even more.
Let's take a step back here. How are you ever going to get any good at this if you are making it so unpleasant for yourself? You've put yourself on a treadmill that you can't get off.
Stop reading all these CS books. In fact, you should stop reading Hacker News. Stop caring about being in a cool startup. Start caring about whether you are enjoying your life or not.
I guarantee you that everyone you know who you think is so much smarter than you got that way not through inherent ability, but through work. You might have heard stories about how incompetent they were in the beginning, but I bet you discount them and say "well, of course they're not serious about that, this is just false modesty." No, it is really true.
Everyone I know who is really good started out that way. In fact I'm starting to think that one of the prime qualities needed to become a good hacker is a kind of willful disregard of one's own incompetence, coupled with a strong desire to do something that's personally meaningful. In other words, you need hubris.
As long as you keep measuring yourself by stuff that's personally meaningful, you'll advance in your hacking skills -- don't worry about that. If you think you need skills before you start something personally meaningful, you will never, ever get anywhere.
Finally, it is perfectly okay not to be a uber-hacker. There are other things in life worth doing. Don't adopt someone else's value system if it makes your life worthless.
So, ask yourself what, if anything, have you ever enjoyed? What makes you lose track of time when you're doing it? If problem-solving, math, or programming has never been one of those things, then you'll have to look elsewhere. If you still think you want to stick with programming, remember what I've said and try to start over with beginner's mind. Try PHP, or Python, or Processing... something very forgiving, and fun, and do something that YOU want to do.
If you are lucky, you might live in a city with a "hacker space". Hanging out there might invest you with a sense of what it's like to be personally involved with a project.
Congratulations! You have just discovered that you have an asset! Forgetfulness, an awareness of one's limitations and an understanding that learning can be challenging are all things that actual newbs are not aware of. You no longer suffer from hubris.
Your newfound recognition of your limitations is the foundation upon which you must build and shore up a structure for acquiring new knowledge, outlining plans which recognize your limitations and executing these plans in a predictable manner.
These problems are the same problems that most programmers (hell, most people) face. This is what the life-hacking movement is about. It is about understanding that we are all human, and that improvement in our lives requires recognition of our weaknesses.
If something is not working for you, what you should do is look for alternative methods to achieve your goal. If you do not absorb knowledge through reading books or theories, perhaps reading code would be better for you, or perhaps you are a social learner and need to talk to other programmers about what it is that they do.
Remember that every challenge is an opportunity. There are even people who have turned their quests for self improvement into niches and businesses in their own right. If you see something that doesn't make sense to you, it may not make sense to other people. If you find a way to make a task easier, others might find it useful too.
I hit the point you're at about 5 years ago. I'm beginning to feel competent and trust my ability to build things. There's a lot more that i want to learn and become better at. It's a long process, but many have tread the path before you, and many will follow in your steps.
Start here: http://www.gentoo.org/doc/en/handbook/handbook-x86.xml?part=...
The thing that is different about installing gentoo vs centos or ubuntu is that instead of something that looks like this:
Would you like to format the disk (click yes or no)?
I don't recall if Ubuntu even tells you what lilo or grub is.
The reason I like this is that it forces you to understand what is going on. What is the /boot partition? Why is that important?
Installing gentoo is going to force you to use tar, and wget. It's going to force you to get comfortable on the command line.
It's also going to force you to understand what a kernel module is. It's going to force you to understand things like: what chipset does my wireless card use?
It's hard. And it takes forever. And it probably won't work the first time.
To me, it's kindof a rite of passage, like telling a carpenter that he has to build his workbench before he is allowed to start working on anything else. The workbench he makes might suck...hopefully this causes him to want to keep building new workbenches until he has one that is perfect.
I doubt this is true. Rather, I think your currently ad-hoc way of trying to learn things is not effective. In other words, it has been your method, not you. One of the benefits of a formal education is knowing what is out there, even if you don't know it yet. (Knowing what you don't know.) That means you can go and learn it as you need to.
I suspect your difficulty with "thinking out of the box" is that you just haven't been exposed to alternate ways of doing things.
My point: you're not stupid. Learning all of this stuff even when someone says "this is what you should learn" is hard. Learning it when you have to figure out what to learn is even harder. Many people here will disagree with me, but I think a formal education is valuable for the reasons I stated. But, you said that's not an option for you now. So I recommend doing basically what you're doing: use existing textbooks to find out what you should learn, and learn it. Treat going through those books like a course. Many university courses also have the course syllabus online - looking through those for topics you should research yourself is also valuable. And, of course, MIT's Open Course Ware (http://ocw.mit.edu/index.htm) was designed with students like you in mind.
Every algorithm & data structure worth implementing has been implemented in C and is probably available in an open source project. You can download Redis, which is fantastic code and covers all the basics. Take one of these projects and start trying to mold it to your will.
Write specialized string parsers in C for doing simple things you'd normally do with a script. If you do it right, it'll be several orders of magnitude faster.
Learn to use the GNU debugger.
Take blocks of algorithmic code you've written, learn pthreads, make them concurrent, and actually able to achieve linear increases in speed as you add cores.
Your greatest ally will be well-written open source code.
So, I think your feeling of incompetence may be just a feeling of being totally bored by doing the same thing for five years. If you got a job that, say, demanded you immediately learn how to make feature changes on a PHP site, I expect you could do it fine.
This doesn't cover everything in your post, though -- you're right, it does take years to become a kernel or compiler hacker. There's plenty of work to be done with fewer prerequisites than those two.
1. Do you work with other experienced and passionate programmers who can mentor you?(http://chadfowler.com/2011/02/24/be-careful-of-who-you-work-...)
2. Do you know how to learn? A lot of people assume it just comes down to reading the material, I found this book explains the process quite well and it is put in the context of a software developer looking to attain mastery http://www.pragprog.com/titles/ahptl/pragmatic-thinking-and-...
3. Have you "cultivated your gurus" so to speak? Putting up a post on HN is a great start, but continually involving yourself in discussions in the greater community will help you to tap into a source of experienced mentors even if you don't work with them. Find groups for topics you are interested in and then involve yourself, ask questions, learn, then contribute to the discussion yourself.
4. Have you considered getting involved in some open source projects? These are a great place to learn from others as well.
In the end learning isn't generally as simple as just reading a few books for most people. I would consider starting with a few books on how to get your career development and your learning process on the right track and then go from there. Even if you do decide you're not cut out for programming, what you learn from those books will be valuable no matter what path you choose.
The books I'd recommend:
http://www.pragprog.com/titles/cfcar2/the-passionate-program... (will admit to not reading this one but I hear very good things)
Yes I realize these are all PragPro books, what can I say, they are that good.
"Structure and Interpretation of Computer Programs"
One bit of advice: Try to learn a bit about proper testing as you are learning your new language, it will be easier than trying to do it after you've learned and testing will help you build confidence in your abilities in the new language.
Two good books:
"Learn Python the Hard Way" by Zed Shawhttp://learnpythonthehardway.org/static/LearnPythonTheHardWa...
"Why's (Poignant) Guide to Ruby" by _whyhttp://mislav.uniqpath.com/poignant-guide/
Most non-rockstars forget Unix commands, it's not a big deal and you can help yourself by writing up a cheatsheet or googling for one. Practice and muscle memory helps.
I haven't had a chance to check it out but there is a PacktPub book on Python algorithms which looks interesting: "Python Algorithms: Mastering Basic Algorithms in the Python Language" by Magnus Lie Hetland
about halfway through there is a list of common things even the toughest interviewers in the industry ask about. Read about all of those just to get a good overview. He just talks about interships but those skills will get you fulltime also. Trust me a bunch of people would love to have that guy full time.
Second you have to read yegge.http://steve-yegge.blogspot.com/2008/03/get-that-job-at-goog...
He'll help you fill out most of the rest of what you need to know but most importantly teach you about a subject that will make you feel alot better about what you feel like you don't know. The interview Anti-Loop. Basically two interviewers at a large enough company could interview each other and no-hire each other because of the questions they would ask in an interview but are only there because a third that has different interests interviewed both of them.
Now you've got the basics of what you need to learn more about which is largely data structures and algorithms.
Now you're ready to do some functional programming. learn some lisp. I happen to be reading the excellent Land of Lisp book myself now and recommend that also their is http://learnyouahaskell.com/starting-out. I'm sure there are other free online resources other guys here will point out also
Now you can get into Norvig and SICP and go even deeper.
"Teach Yourself Programming in Ten Years"http://norvig.com/21-days.html
"Structure and Interpretation of Computer Programs"http://mitpress.mit.edu/sicp/full-text/book/book.html
I didn't start with them because Norvig starts out discouraging you ,not that he isn't right about how it will take time to improve just that you will be amazed at how fast you can move when you really want it, and SICP can be really daunting if you start with it.
Also there is a great well of books and tutorials online about all the things you want to learn. Compliers to the cormen book you mentioned. The fact that you tried with that book means you are on the right track and you will get it.
Also I can't forget http://www.topcoder.com/http://projecteuler.net/
and newcomer http://www.coderloop.com/
Those sites are places to hone your skills by working on coding problems. The biggest thing you have to do is pick some topics/ problems you are interested in and CODE.
You'll be surprise how far you get and how fast you can get there.
Do not feel down about feeling stupid or inadequate, just keep working in a reasoned manner towards your goal.
You will get there.
I have almost entirely started to avoid facebook for this reason. You always just see the bright side of everyone's lives, which can make you feel depressed if you are unsatisfied with your own. Likewise HN shows you the cutting edge tech, the cool startup scene, and a lot of writing from some very VERY smart people. If you don't feel like you measure up it can be an addictive way to reinforce that feeling.
Clearly I am competing with a deeper psychological issue and the ultimate solution is to accept myself, accept my limitations, and find peace. I am working toward this and making some progress. But I wonder if my progress is being hindered by such a flood of exposure of awesome like HN.
Many (most) thoughts I have had reading HN are clearly irrational. "I can't be happy unless I am founding a startup." "I can't be happy unless I am programming in language X." "I can't be happy unless I move to SV."
I recently severed a very close relationship because I finally accepted how toxic it was, even if that toxicity was largely due to my own loose boundaries. I wonder if my relationship with HN is the same thing.
tldr: HN exposes you to so much awesome that sometimes you feel like shit in comparison. You're not.
To this end, I'm planning to start "Breadth First Learning." (This is a reference to a page on Ward Cunningham's original Wiki.)
Someone can easily gather all of the same material online, in greater depth for free, but our goal is to provide a convenient and relaxed environment, so filling in your background knowledge is easy, fun, and relaxing.
(I guess I should get a "coming soon" page up and gather emails. I just thought of this yesterday, so I'm not quite there yet.)
You are stuck being a cargo-cult architecture-astronaut because you are stuck in a language that exemplifies and encourages it. ROR and python, while perfectly good in themselves, will allow you to stay there. My advice would be to take something 'horrible' but useful - PHP springs to mind - and play with it. Do fun stuff just for the hell of it. Do things quickly, not correctly. Correct things one by one and see which things actually make a difference, and which things were a complete waste of your time.
Memorising linux commands? What? Slap! Write yourself a cheat-sheet and remove that excuse from your head immediately. It'll take you 5 minutes. If it takes you longer, you're doing it again. Stop making the perfect cheat-sheet that covers every example of everything you may ever need, and write the 5-minuter that covers 95% of it.
Set a line between the front of what you're doing and the back. In front of the line, everything must be neat, useful and functional. Behind the line you can do whatever you please. The line is the part of the 'achieving things' model that cargo-cults miss - the difference between practice and theory. You might even surprise yourself about your coding ability once you start evaluating things that way.
Here's a shortcut to going to a real university. Go to the courses' websites, read the lectures and do the homeworks. If you can find a course where lectures have been recorded (video, or even audio), so much the better. Chances are you'll find this approach easier to follow and stick with than working through a book. These lectures have been specifically designed to feed students knowledge in 45-90 minute chunks, and assignments have been designed to reinforce the lectures contents without overwhelming the students. I'm partial to CMU CS course structure, which basically is:
1. Intro to programming (basic Java/C++ course: principles and syntax)
2. Intro to Data Structures and Algorithms (some theory, mostly programming in imperative languages -- C++ or Java)
3. Advanced Data Structures and Algorithms (more theory, but mostly programming in functional languages -- ML)
4. Systems level programming (systems concepts -- memory, cache, page tables, etc; programming -- C and assembly)
5. Algorithms (CS theory, almost no coding)
I think you can safely skip 1 and 4, and even 3, to get CS fundamentals that would carry you far in enterprise-level programming world.
Here are materials you could start using immediately:
assignments, tests and lectures: http://www.cs.cmu.edu/afs/cs/academic/class/15451-s10/www/
Make a Linux box your primary computer at home (if you aren't allowed to do it at work). You'll be surprised how quickly you'll memorize them.
Which describes how math books (and other technical books by nature) should be read and studied. Don't think after reading a paragraph, you should understand everything. Take it slow, and take the time to work out things on your own, the more this happens the easier it gets.
Also, whether you are good or not at problem solving, just remember that you should be enjoying the process of solving problems, not necessarily just the answer. It took Steven Hawking 29 years to make a big step of progress with Black Holes. Experimenting is just as important as the thought process is. Read something, test it, break it, try to fix it.
You also stated you had difficulty looking from new perspectives. This is tricky, but first get your creativity flowing, then ask all of these question. Why? How? Why Not (INSERT SOMETHING ELSE)? Will it work with this? What is the fundamental idea? Is there a way to change the implementation of how this is done, while still maintaining the proper outcome? Scribble down your ideas, and play with them.
For example, I remember when I was trying to fix my indoor toy flying helicopter after the plastic broke on one of the propellers. Instead of taping it I asked myself, what it was exactly I was trying to do, which was reconnect a broken plastic propeller. Then I asked myself what ways this could be done. After fooling a bit, I decided that since it was plastic I could simply melt it back together. You just have to learn to break things down, and chunk them together, and play with the elements of a problem.
Keep reading, learning, most importantly have some fun.
If you can learn SICP then you'll be in the top 5% of programmers in terms of understanding theory, and you'll be in a position to understand if you like CS or not. If you don't like it, then consider changing careers or setting more limited goals (like you could program not-that-well while caring more about the rest of your life, that's what most people do).
Do not go back to school, at least until after you read SICP. SICP is the single best thing that schools have to offer anyway.
I love Ruby and use it a lot, but if you want to understand programming then Ruby isn't what you're looking for right now, and definitely not rails (building a website isn't all that hard, kinda like java enterprise work). Ruby will annoy you less than java, but it won't make you feel like you really understand the concepts behind what you're doing.
Your path forward probably should be determined by the kind of work you want to do, but I think you know this.
Certainly don't be sucked into the new technologies because they're cool. Nor should you necessarily get a CS degree, depending on the work you want to do. You sound like you want to learn everything ever about computing, but that's a recipe for frustration and won't necessarily help you.
But anyway, good luck.
Don't think about algorithms, data structures and all other topics as some huge roadblock, they really contain a lot of loosely connected topics which are not all that difficult if you look at them one at a time with enough patience. "What One Fool Can Do, Another Can Too". You get more out of reading a textbook when you already know disconnected bits and pieces and you want a more unified view.
Your writing reminds a bit of my friend who is the best guitarist I know, but has a constant inferiority complex, because he says he "doesn't know music theory". I don't know much about music, but if I try to get down to the specifics of what he doesn't know, it turns out that he actually knows a huge amount, but he still keeps repeating "if only I knew some music theory"...
It might be a knee-jerk reaction on my end when it comes to to the whole "maybe I'm not smart enough", but you're showing awareness of your own (current) limits, which isn't something to speak lightly of.
What are your experiences with problem solving? It's something you learn, like most things. You might not be able to 'think' in that fashion now, but I know quite a few people who swear their brains and perspectives have been reprogrammed through forcing themselves to study math despite lack of talent, and in my own experience you can learn to flex and twist your mind much like you can your body, even if just like with your body it might be easier or harder in some directions.
You might however lack the aptitude which make it more fun to engage in or otherwise lead many more savvy to programming and CS, and only you can decide wheter this is something that slows you down or stops you dead.
When I did martial arts, I had some students who were dismissive towards their less sports-savvy comrade since they took longer or had a harder time to learn the basics; but what they forgot were that they'd already learned all the periphery skills of using their body from other sports, for them it was a simple matter of learning one more skill atop their experience and skill at already using their bodies, the ones who were having troubles were learning several more skillsets at once since they hadn't up to that point.
The same could apply to you, people have the opportunity to learn or understand different things at different points in their lives; some lessons some of my friends learned when they were 12 which other friends learned when they were 60, partially since they hadn't had the opportunity to truly learn or understand them until then.
I guess what I'm trying to say is, try not to be discouraged because it's hard; it can sometimes mean you're not aware of all the things on your plate at the moment, and even if it feels you're failing you're probably learning something else that's also beneficial while you do.
Sorry for semi-rant, but that's the part I felt remotely competent to comment on.
I do however agree that projects are the way to go if you wish to learn or remember. I and my friends learn more from our personal pet projects than we've ever done at our University.
I'm obviously not in a position to evaluate your IQ, but to me you sound pretty average. If you stick with your determination to get better, you'll be better than average in a few years, because most people don't.
Come up with your own curriculum then. Invent homework assignments like the following:
1. Install a linux distribution: http://www.ubuntu.com/desktop/get-ubuntu/download
2. Install the languages you mentioned: sudo apt-get install sbcl ruby
3. Type 'irb', 'python','sbcl' to open interpreters for Ruby, Python, or Lisp
4. List the names of all the data structures and algorithms you've heard of and their operations. Be sure to include hashtables and b+ trees.
5. List the worst\best\average case runtimes for each operation.
6. Describe a practical use case for each.
7. Implement each by typing directly into one of the above interpreters.
You'll learn much faster, always get A's, and not have to spend any money.
I can't express to you the kind of satisfaction I've achieved when I've done stuff I thought I had no skill for. But those first 2 weeks are scary! I keep thinking, "Crap, I can't do this--I'm a fraud! Everyone is going to find out soon. Oh, what have I gotten myself into!" And then suddenly I realize in my brave attempt to just fake it I've actually accomplished something. My thoughts become "I think I can actually pull this off!" It's a very cool moment.
Diving into the deep end of the pool is the only way I've ever significantly advanced my skill set. Reading books/papers and writing little test things can advance your skill set incrementally, but biting off more than you can chew is the only way I've found to level up in life.
Mostly, I've felt it because I've (been lucky enough to and / or made it a point to) work with really talented programmers, people who were better than me. That is great for learning and very hard on the ego. Look at the people you're working with and ask yourself if they are ALL super geniuses, or if maybe some of them are simply more experienced and / or had the luxury of being able to focus more on their studies while at school instead of having to work and deal with the grief of losing a parent.
As to feeling like you're slow to debug and problem solve and whatever...don't. If you have the brains and the persistence to have made it this far as a programmer, it's very unlikely that you're actually dumb. What you ARE, self-admittedly, is inexperienced and under-educated. It is experience, not brilliance, that makes people fast at debugging: when you've seen similar problems before, when you have an array of exploratory / testing techniques that have worked for you in the past, then you too will be fast and all the younger programmers will look up at you and go "damn, I wish I could be as inventive as that guy."
Here's my best advice for you right now: stop focusing on learning for a while and focus on having fun. If you find that you enjoy programming, everything else will start to come easily. Here are some specifics on how to implement that:
1) Start a notes file where you jot down anything that seems interesting.
2) Follow your instincts; whatever you stumble on that seems interesting, do a bit of googling and read up on it.
3) Reading is good, but coding is God. If you don't write actual working code for something, don't imagine that you have learned it.
4) Don't push. Whenever you get bored or frustrated with something, put it down for a while. Go read about something else in your notes file. Or watch TV. Or take a walk. Or whatever you feel like doing at that moment. Give yourself permission to not be perfect; you'll find it amazingly liberating.
5) Take care of your body. This one sounds silly, but it makes a huge difference. Sleep enough and eat right. Tired programmers are stupid programmers and anyone who tells you otherwise is lying. The myths of super-productive 40-hour coding runs powered by Jolt and Cheetos are just that -- myths.
6) Definitely find a project, and do it in a new language. Choose a dynamic language for now; you can go back and learn the C/C++ memory management stuff later. Ruby or Python would be good choices, as they are highly employable languages that are used in both enterprise and startups. node.js would be another good choice, but is not yet as employable. If you want a suggestion for a project: pick a website that you like (ideally one with a public API) and write something that pulls down data from that site and stores it to a database.
- go onto iTunesU or MIT OpenCourseWare (or just find them on YouTube) and watch the video lectures. The three Stanford CS ones are excellent, and probably give you all the theoretical knowledge you need to proceed. There's a good one on Comoutational Linguistics which helped me get to grips with natural language processing and grammars, but is even more relevant for compilers (though to be honest I don't see why you need to know this unless you plan to actually write a compiler)
- read Code Complete. That's probably all you need to not be a 'douche bag coder' who causes more problems than they solve
Java is not fun.
I'd rather walk a mile barefoot on broken, salty glass in a hailstorm than to ever write another line of Java. At least my memory has mellowed -- I used to really hate it.
- Common Lisp: my current love affair. Something about the way the parentheses sort of round off all the sharp edges, and the beautiful symmetry of it all. After a while you can get a feel for how smoothly a form works just by glancing at its overall shape. It feels good to build things that are beautiful in every sense of the word.
- Python: So easy a manager can do it. Loads of awesome libraries.
- Racket: This probably would have been first on the list had I not accidentally organized them alphabetically :-) In fact, I'd even go so far as to suggest working through the book "How to Design Programs". Actually, you know what? If you'll promise to work through all the exercises in the book and pass it along to someone else who is struggling when you're done -- I'll give you a copy (years ago I mistakenly ordered two copies). PM me if you want it.
Sorry, but I'm not proficient at everything of this (especially Linux, maths and algorithms), and still I consider myself a talented coder. I'm very skilled at gluing code together (gluing with skill, not throwing things together). At the end of the day, what matters is whether you can make things work, and nothing else.
> OTOH I have given thought about if programming is really for me, I have found that I'm really, really bad at problem solving and "thinking outside of the box" I have come to accept that I'm really not smart. I'm slow, forgetfull, concepts never seem to stick, I have to force myself to not take things for granted, it seems no matter how hard i try I can't look at problems from different perspectives and understand the implications of a particular solution, I'm starting to think I may have a learning dissability, or that is because I lack the basic toolkit for problem solving, but I really think I'm just not very smart.
I think that before learning to think out of the box, you should start to live out of the box. Join an acting class, especially one where improvisation is stressed (I recommend you find an acting school which teaches Lecoq's method). Challenge yourself to do things you are bad at (in the beginning, I was very very bad at acting).
Try finding similarities between things in different subjects. Read "Neruda's Postman" by Skarmeta to learn what a metaphors are and how to find them. The more different the areas of human activity you'll know, the better you will be at spotting similarities and challenging your ways of doing things.
Interviews and conversations online may lead you to feel like you need to beat yourself into reading books on operating systems or some other specific sub-field, but a sincere interest in things like garbage collection isn't the only path to success. Algorithms comes up a lot because it's easier to filter for people who know the topic well, but those people have gaps in their abilities, too. Those topics aren't more important than things like domain knowledge or writing maintainable code, they just aren't always as easy to recognize, test for, or brag about.
Sure it's good to learn them, but learn them when you have some motivation to - start writing a game and then read about path-finding. Learn RegEx out of an interest in shortening some code at work. Turning learning into hard work by forcing yourself to learn about things that don't interest you is just going to make learning more difficult. What's important is just that you learn something - so relax and do something fun.
I went through these after a rigorous college CS experience and several years of work experience and still found "ah ha!" moments.
It's a good solid foundation in 30 or so hours. The text is also available online for free.
Algorithms and Data structures. I have CS and Applied Math degrees, but honestly - very rarely I have to recall the inner workings of specific algorithms and data structures. It is useful to know how it all works, but not as important as you may think. You can certainly follow "fake it till you make it" approach: you need to remember memory and time complexities of the data structures and some implications, e.g. "hash tables have asymptotically O(1) search time but may consume more memory than red-black trees that provide O(log(n)) search time but have guaranteed memory and search time constraints". And so on and so forth. So go ahead and read Cormen with that in mind.
Also, my guess is that you need only as much CS as you need to become a better software developer. I don't think you want to be a theoretical computer scientist, do you?
In your situation I would also recommend reading following books:
"Structure and Interpretation of Computer Programs". Honestly, to CS graduate it reads like a book for preschoolers but it is very beautifully written and is almost zen-like. And it will definitely help you understand what programming is about if you did not get proper formal training.
"Design Patterns". It is not a CS, but Software Engineering book. It provides a framework for your software design skills. You can be a great programmer without reading that book, but then you have to be exposed to a lot of beautifully designed code, and that book will save you a lot of time.
Find a popular and stable open source project that is closest to what you are doing now or what you want to do and read the code, look at the build infrastructure, documentation, try to get involved and maybe even fix some bugs, starting from simplest ones and moving up to features. You'll get a lot of brutally honest peer reviews, just don't abuse it.
Hope that helps.
You talk about going back to school, finding a new job, overcoming a learning disability, learning computer science fundamentals: data structures, algorithms, operating systems, software design, discrete mathematics, compilers, and command line essentials.
I think you will feel better if you step back and focus on one thing at a time.
Perhaps you should pick a new language, pick a well known introductory book for that language, and then commit to spending a few hours after work every day going through the book. You can do this on your Windows work computer- don't bother to learn the ins-and-outs of a new operating system.
Read each page, type out each exercise, consider how what you're going through relates to what you already know.
If, after a month, you're making progress and still looking forward to spending time with the book after work, I'd bet programming is for you.
As a next step, find a local user group for whatever language you pick and drop in. If they seem like nice people, if they are talking about interesting stuff, if it is something you enjoy, keep going back.
After three months, I'd guess that you will have finished the book, you will know a bit more about a new language, and you will have met some other people in your area that area up to something interesting.
While any language and book will do, try to find something basic that you can finish in a few months. If you're looking for a specific suggestion, you might try ruby and http://pragprog.com/titles/ltp2/learn-to-program.
As mentioned before me, you can learn a lot on the job. One of the best dev's I know never finished college either.
I am always looking up the proper syntax of commands (find -exec anyone?) It just takes repetition and the constant thought that "maybe there's a command that does this better".
Finally, put down the math books. Put down the compiler books. Data structures and algorithms, sure, but those others. Bah! Now, if you want a supplementary book that helps a ton, pick up a patterns book, preferably the "Gang of Four" book (http://en.wikipedia.org/wiki/Design_Patterns). It helped me to look at problems in a bit more of a formal sense, and it allows me to say "Oh this is such and such a pattern" and other devs get it immediately.
Don't get discouraged. You may just need a new job where you are mentored if you feel like your skills and experience is meaningless. Your desire to learn and your passion for your chosen career make you a fertile ground for training.
The point is that you shouldn't try to do something, you should do it, i.e., you "span" a desire in your soul and you go along the feeling, the "thinking" is just for control, not substance... at first you will litteraly be bugged by thoughts like "i'm not good enogh for this" etc... aknowledge the existence of those thoughts, and then throw them away.
Yours is a post about bad self-fulfilling prophecies.
It's not really a matter of intelligence for the most part, it's only a matter of experience.
PS.: oh, and AFTER you got rid of the bad self-fulfilling prophecies, you could try to create some good ones :)
Good luck, you are going to need it
You have the most important problem solving skill of all (and one of the rarer): recognition of your own limitations.
(Hopefully more later if I think of more)
Addendum: I don't feel like it's as important to take classes in computer science. More important is to take classes in math, because math is a lot harder to teach yourself.
Once you learn a little math (say discrete, number theory, and linear algebra), I think you will probably have the mental toolset to think scientifically and learn a lot of the computer science on your own.
A basic class in data structures and algorithms might be nice because it will give you homework and fill in some gaps you might have from teaching yourself, but after that, computer science learning can be largely self directed. Automata is a really nice class to have if you can find it, because it ties in with the math, but it's not necessary for most industry programming.
I never took classes in optimal search algorithms, computer vision, or statistical programming, but I've done work in each of these three things. I taught myself as much game programming, graphics and user interface stuff as I learned in classes. I had classes in compilers, languages, automata, AI, robotics... these were all great, and not things I could easily have taught myself, but they were also specialized, and haven't been so directly relevant afterwards.
Linux is all experience; I haven't been on the job long, and I'm still learning it. Earlier this week I found out that I was running some of our servers to max CPU usage because I left greps running on them (didn't know the difference between suspending a process and putting it in the background)!
Quitting is also totally cool if you can manage it. I used to be a graduate mathematician. It was very hard to figure out that this wasn't what I was supposed to be doing with my life... but figuring it out and leaving was the best thing I ever did. I would have been very unhappy. Now I'm happy! I was also extremely fortunate to have a father who was happy to support me switching fields. Your post reminds me how important that was, and makes me grateful enough that I think I should go call him.
Good luck, and... uh... <small voice> a hug.
I just don't want to be a cargo cult programmer anymoreThen don't be. The main thing to do is Practice (note: work isn't practice.) Basically build something, but at every step of the way try different approaches and measure the results of what happened. Every step of the way look for ways to improve what you do.
You'll work and work, and it seems as if you're getting nowhere, then suddenly one day you'll wake up and you'll look back and realize, "Wow, I really have come a long way from where I started"
Read other people's code. Find small pieces of software that do the kind of thing you would want to do that are written by people you know are talented and see how all the parts fit together. Maybe there's one at your job, or a well-polished but small open source project.
Run it through a call graph generator. See what they encapsulated and what they didn't. Look at any unit tests, if they're there. Most of the real software that I've looked at is much more about knowing how to lay out logic than it is about particularly advanced algorithms.
Algorithms are certainly good to know, but there's a reason why computer science and software engineering have two different names.
You forget stuff too eh? Here's a simple solution that I think everybody should do, not just you. Take notes on what you do. Keep a little recipe book of things you've had to look up and figure out. At least you might recognize that you've seen the problem before and have solved it, then you can just go to your own reference to refresh your memory. If you're diligent you'll get a great resource in the end. Make sure if you do this to back it up.
Honestly, it sounds to me you read HN too much. There's a lot of shit on here about what everybody thinks makes a decent programmer and it can make anybody feel that they don't have skillz. Take it with a grain of salt. If you like what you do, you're always interested in learning more and you realize you don't know it all(this obviously is the exact opposite of your problem) then that's enough.
So learn about compilers and discrete math, and FFT, etc, if only to give yourself some familiarity with them for future reference. But please don't force yourself to learn about all of that unless you've got a keen interest, and learning about each subject is the goal rather than a chore that's in your way of being a "good" programmer. Learn what you need when you need it or you're liable to burn yourself out.
I too am sorry to hear about your dad.
Whatever you might think about you being a "cargo cult" programmer you sound like a good guy. Good luck!
If you're interested in learning new stuff and building web apps, you might want to look at Groovy and Grails, because Groovy would be easier to learn for someone with a Java background.
For some reason our schooling systems haven't picked up on how incredibly useful the spacing effect is. Use it to your advantage! It has made a real difference for me.
My history sounds a bit like yours (minus the family tradgedies). I am a self-taught programmer in my mid 30s, who for years, had only the sketchiest knowledge of advanced algorithims and data structures, but I could make-shit-happen(tm) for my employers regardless. Hell, some of them even thought I was genius, when I knew I was a fraud.
A friend of mine, who I consider to be a 'real' software genius , once told me "Relax, eveyone is a fraud".
She was right.
Being successful doesn't seem to have much to do with how many linux commands you can remember, or if you can write code for a threadsafe linked list on paper. Past projects and a github account that can be checked out by employers are more important.
I used to get really anxious about not having not any teriary qualifications or certificates at all, but it turns out most people who do have them are crap anyway.
At some point you'll be able to get a job helping people who haven't been building stuff as long as you to avoid mistakes you've already made.
The first remedy against that is to understand the stuff you have been copying. That alone elevates you from cargo cult programmer to a copy and paste programmer. Now you need to understand why copy and pasting is a bad way to program and how to structure your code so it is better.
This is a totally different thing from learning nifty algorithms of people being far cleverer than you are. As someone else already said, you can go a complete programming career with happy coworkers and customers and never really go deep into algorithms. Learning and practicing good software engineering practice will help you more than abstract CS concepts.
I can't offer any valuable expert advice since most of my programming skills involve stitching existing tools together with very little in the way of actual programming. Sometimes though I fall into a project that makes me genuinely passionate about programming and all my self doubts are erased.
From one cargo cult programmer to another, good luck.
Then I realized that realizing that you're not that good is the first step towards becoming really good.
Here are the links:
Operating Systems and System Programming:http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewPodcas...
Introduction to Algorithms:http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewPodcas...
There are other series available on iTunes U as well, but don't worry, relax, do it step by step and then you might want to have a look at the rest of the series too.
What are your soft skills (social, sales etc) like? There is a real sweet spot for people that can span both worlds. That role is a lot of fun too.
So you don't know everything, and you realize it. The people who are the most stupid are those who are certain that they know everything that matters. So you're not stupid.
You want to better yourself. Again, that's good. You're motivated.
You mention some subjects you wish to learn more about. I'd ask for advice on which books are best. Buy those books and skim through them. Keep the book(s) nearby; when you get into something that you need to know more about, crack the book open and read the section. That way you can implement it as you read about it, and you'll understand it far better.
Try contributing to an open source project, and make a few friends in the FOSS community. Treat it as an art. You'll be good at it and happy eventually.
Just because you have some technical skill, doesn't mean you have to put it prominently on your resume. If you don't want to do PHP jobs, take PHP off your resume.
Can I program COM/NAnt scripts/batch files? Yes. Do I want to get paid to do it all day? No. Do they appear on my resume? No.
A company name, length of time, and languages / platforms used is really all you need to say if there is nothing better to put in the space; I expect references would be helpful for most clients in that case, however.
I'd suggest definitely putting OS projects on your cv, if they're more relevant skills wise personally I'd be happy to see them ahead of your career history, probably with a quick explanation as to why above them.
What sort of jobs are you going for? I do occasionally get cvs from people with a lot of experience in other languages, and some in Java which I'm hiring for. The main problem is they're being put forward for positions based on past experience in other languages. Whilst a lot of what developers do is transferrable I have to measure them against other applicants with more relevant experience so often they're too expensive vs the competition. If they are applying for a more junior role to balance this out there's then a risk to me they won't be happy with the salary I can offer them and/or will return to their previous work.
Given the above I'd suggest tacking the risk by explaining you're trying to move your career into a new language hence applying for the role. This may also feed the ego of whoever you're applying to that they're working in a desirable language. If you are willing to take a slight step down based on moving away from an area of expertise you can then differentiate yourself against other applicants based on your broader experience.
I would suggest that you put together a moderately short memorandum of the facts. You will need a time line, dates and names of attendees of meetings, summaries of what happened at each meeting and what happened. If you keep an appointments diary, copy out the relevant pages. Collect copies of all the employment documents. This will save time and money if you need to go forward. In the future, when you have a meeting with anyone involving this, write a memorandum to the file recounting exactly what happened with quotations, agreements, action items, etc. Keep everything factual and avoid editorial content and presumptions of intent.
Check your employment and intellectual property agreements. I suspect that your employer does not have approval rights on your excluded intellectual property declaration. The purpose of that declaration is to make the company's job simpler--they claim to own everything you did not exclude--and since it describes your intellectual property prior to the point of employment, they have no say in its content, you own what you own. I can imagine a situation where the company might ask for a clarification of what you are excluding, but they really have no right to challenge the substance. Moreover, I further suspect that the fact that they did not come back to you in a timely fashion and that they went ahead and employed you immediately would be interpreted as _ipso facto_ agreement that the declaration was an adequate description of your excluded intellectual property.
IANAL, but I think you should just quit. This is not ethical behavior on their part. If you go along with what they're asking, you're essentially abandoning your IP rights, in exchange for nothing but continued employment. I wouldn't want to work anywhere that even asked me to do that.
Yes you can and should consult an attorney, but if the situation turns adversarial, you might as well quit.
IP-related conflicts of interest are a real problem for anyone with entrepreneurial aspirations who nonetheless needs to take a traditional employment position. I think the best policy is to avoid working for companies whose businesses have much overlap with one's own plans (I have done this on occasion myself).
Yes, that probably means taking a less interesting job, possibly even making less money, while you work on your project on the side.
The suggestion someone made to sell your IP to a holding firm is a very interesting one, but I don't understand the implications. That company will somehow need to defend its IP rights at some point -- at least, the way this is going, that outcome seems likely -- and I don't know how it's going to do that, unless you can get a patent filed in a couple of weeks. Even then, to litigate a patent you need money.
It's more than possible I'm missing something, so maybe you should look into that option, but my initial reaction is not too optimistic.
Your lawyers will show you how to do this nice and legal.
If you get to fill in the form again, declare yourself as a director of the company /you will form/ to hold your IP. That's all, do NOT list the IP. The IP baggage is then not with you, per se, but with the Ltd company you created.
Sounds like my perfect nightmare, I hope this resolves itself!