Have you ever been skydiving, bungee jumping, or something similar (even public speaking for many)? Unless you have a disposition of steel, when you're at the point of jumping, your gut is screaming at you to not do it, even if you're rationally aware of the (low) risk and want to do it.
Comparing launching something on to the Internet to jumping out of a plane seems silly on the surface, but there are some strong parallels. The more you do it, the easier it gets (though in both cases it rarely becomes a breeze).
A common trick is to pull back on some features so you can launch with the "minimum viable product". And even if you do that, yes, it might fail. But at least you'll know sooner and can stop dragging your heels. Build up some velocity and even if your product/site is going in the wrong direction, you can more easily change course than by looping around procrastinating.
Don't view getting a job as failing. There's a lot you can learn from the experience. Both in terms of what to do and what not to do.
Don't view it as 'making your parents happy'. It's more about independence and self-sustainability. What would you do tomorrow if your parents decided to cut you off?
If you're working 8 hours a day you'll still have a few hours to work on your own stuff. I work 8 hours a day with a 1 hour commute each way and still manage 1-4 hours a day on personal projects.
My advice? Get out there, get some perspective. You can learn a lot about responsibility and self-discipline from the workplace, maybe that'll help you with your own stuff as well :)
Go out and get an 8-5 job, make some money, become independent and work on your project on the side.
Also- don't be afraid to make mistakes.
Java as an ecosystem and including the VM? We might see it splinter a little but the VM is even more entrenched than the language. There are too many other languages and ecosystems sitting on top of the JVM and its compatible libraries that I doubt any damage will be negligible in 5 years even if Oracle really screws things up from here.
Well, now over a decade later and a tonne of real work has been done by real companies with Java. By people who don't give a shit about whether it's buzzword compliant or 'free as in speech'.
Nerds getting their knickers in a twist about freedom or whether you can write 'hello world' in 20 less characters, or whether you can implement currying in Java are just not the target market for Java and quite frankly, outside a very small cloistered world, they're not really an important market, either.
One day, Java will be superceeded, and I expect that it will be something akin to Gosu - kinda like Java, Java compatable but 'better' enough in some way to make people want to move - much like the C to C++ transition happened: people can keep their existing investments and codebases, but start doing new stuff in a way which adds some value. I don't think such a language exists yet - Gosu doesn't offer enough I think. But one day,
Does anyone have any experience with this in Go?
Also, take a look at this article: http://news.ycombinator.com/item?id=1891725 It sums up Go's last year.
In someone else's opinion:"If you're paying any attention at all to Go, you're not learning anything. In fact, it's possible you're damaging your brain. It's projects like these that make Google look really bad and unattractive to programming language researchers, especially as compared to Adobe, IBM, Sun, and Microsoft." http://lambda-the-ultimate.org/node/3896
So there's a controversy, which thankfully means I can be impartial and yet tell you to make up your own mind by trying it out :) Which btw you can do in your browser, at http://golang.org/
1) When browsing lists I like the spacing and big font, but I would also like to see all books without having to scroll. Like an easy way to take the list in.
2) Add more ways to login, maybe including your own system.
3) This might be a cheesy idea, but is there anyway you can theme book lists based on their topic/category. For some reason I think the layout of scifi fiction list could/should be different than a list of Perl books. Btw, when I say theme I just mean general layout stuff, not like MySpace animated gif theme.
(I understand the concepts of using google/fb/etc sign ons, but I don't like to have to log into them if I can avoid it. Paranoid they'll know every website I have an account on. sort of..)
I think it'd be better if the recent books took me to the user's book description first (like in the book lists). Then if I wanted to go to Amazon, I could use the link from there.
Did you want feedback on coding as well? If so I can pass some info along.
Other than that i like the layout and the visual of the site. it's simple and makes a ton of sense at quick glance.
nice work, bro
Edit: also https://gist.github.com/670034And http://www.7bks.com/blog/179001
I also recently used another screencast for setting up a Sinatra app. It's incredibly simple, go figure:
Very helpful. The Heroku docs also have a lot of information about the Heroku specific stuff that you might want to read about (like dynos and the backlog).
- Functional Programming - Logic Programming - Managing asynchronicity - Managing concurrency / Managing state - Pruning bad directions in OO (see the first two) - Type Systems - Virtual Machines
I also don't see Haskell and Clojure being particularly specialized. They are very general purpose and suitable for tackling any kind of programming problem - simple to complex, JS on the other hand is a language with a very specific focus.
I don't see the importance of being able to read and understand C/C++ diminishing anytime soon as those languages are intimately tied to our operating systems.
EDIT 2: I added Type Systems above. I think Haskell has shown the power of an expressive type system. However it has it's problems. I look forward to see the distinction between languages w/ strong type systems and those without being abolished. Languages should support turning the type system on and off - see Qi. Type systems also should allow the typing of a much richer set of values - Qi's sequent calculus types is eye-opening in this regard.
EDIT: I'm opinionated about this, but the constant announcement of new languages that simply continue the traditional stateful OO paradigms (perhaps tacking on a couple of syntactic niceties or a crippled static type system) seem like complete dead ends.
Edit: Bergin & Gibson's _History of Programming Languages, Volume 2_ is pretty good, too, but that one covers more recent languages: Prolog, C, Forth, Lisp, Icon, etc.
It's not a bad idea to read about old experimental designs, particularly those that didn't work out because of limited hardware. I think there's a lot of potential in the APL and concurrent / constraint logic programming families.
Existing languages suffice for most easy problems. For the hard problems that ive been tackling lately ive wished I could overcome some logical impedance between what I am doing and the language in a sane way. A few examples where additional flexibility would helpa) Opengl is a state machine. Being able to take the graph of my program and write assertions that critical setup functions are called before other GL functions would help detect invalid logical states.b) Before, after functions (which exist in lisp) would be nice.EDIT: c) Being able to say -> for all objects in in my program that match this criteria, do something. Essentially -> for x in criteria(primitives(program)) do foo.
EDIT: A common thread to all the times I feel trapped as a programmer is when I have a knowledge of the meaning of my program which I want to express, or perhaps a question about its existing implementation which I would like answered. Many languages lack the introspective power to help me as a programmer to tackle these situations. Others simply make it inconvenient to do so.
It doesn't make sense to forever expend the effort required to force every problem into just a handful of languages' structures - even if it is theoretically possible to do so.
I think that things like OMeta (http://tinlizzie.org/ometa/) are an important piece and the other work being done by Viewpoints Research (http://www.viewpointsresearch.org) could help.
Environments like .Net and the JVM stack will slowly allow tighter and finer-grained interoperability of the languages they host. We currently have class-level blending of languages, and in the future we will probably see method-level blending. The best DSL for the job.
The future will be more about declarative programming - write down a mental model of the program, and the language/compiler will do the rest. A simple restricted example is SQL - you write what data you want and the optimizer figures out the best "program" for the query, using even genetic optimization in the case of PostgreSQL.Another example is data binding - you write down what data connects to what part of the GUI, and the framework figures out what to update and when.The problem with SQL, data binding etc. is that they are not tightly integrated into a general purpose language, and do not have clear theoretical underpinnings.
A good language will have simple, compact theories and abstractions as general as possible to reduce the mental baggage necessary for programming - instead of remembering hunders of special cases, you should only work with a couple of general constructs.
Optimizers for these languages will have to be far more advanced - remember state between compilations to reduce the impact of whole program optimization, have advanced specialization and type checking capabilities using abstract interpretation etc.
Data models will have to grow too - they will have to be high-level and low-level at the same time to cope with the onslaught of data. The semantic web provides a fairly universal data model with RDF/OWL, but this again could be simplified and abstracted. A data model should also have the capability to specify the physical layout of the data down to the bits, but also at the higher level, such as distribution between disks and machines.Ah, finishing now to avoid tl;dr.
I can certainly see Clojure in JS pretty soon. This might be wishful thinking on my part (see bellow for why).
"Will game development ever diversify or will it go from C++ to C# to ..."
Yes, WebGL is in my view a game changer (pun intended). I'm pretty bias considering I use it currently a lot. But I'm replacing scientific application in C++ with WebGL version online.
Finally, I don't see a slow down in new languages popping up any time soon. I think it's important that they can run on some generic VMs to allow for multi language apps to be possible.
The advantages of modern syntax design coupled with a fast native compiler would be a potent and exciting mix.
This aspect of software development was largely missing from my formal educational experience in programming language paradigms.
What I am trying to do now is develop a better "taste" for what is "easy" using one programming paradigm compared to another. I'd ultimately like to have a better problem to paradigm mapping internalized. I've toyed with the idea of putting together a seminar or undergrad course to do flesh this out.
The elephant in the room is more market based - what programming languages will someone pay you to use in the future? We already have a number of interesting programming languages. But when you do your job search these days, I see a small number of large buckets. The .Net/CLR C# world, Java in the enterprise, Ruby (really the Rails framework, but even so), and a strong side of the data storage backend of your choice (RDBMs or NoSQL or sexps - kidding on that, pg keeps our own forum in files full of sexps).
However I don't think the big players in the industry will be able to. To deliver games of great scale (WoW) or intense graphics/effects you're going to need something that can deliver the absolute best performance.
Some people will prefer to stick to one language, some will dabble in others, but... most of the time, if the language is not radically different from everything you knew before, learning a new one isn't that hard.
I don't see this pattern changing in the foreseeable future. I mean, some areas always had their niche programming languages (heck, most areas do, anyway).
And the... result: http://arclanguage.com/
This requires 3 steps:
1. Find a hard problem, with the emphasis on "Find". It must be someone else's problem, not yours. It also needs to be big enough to be important, hard enough that the elegant solution hasn't been found yet, but not so hard that you'll waste the rest of your life on it. Examples:
Bad: Invent a time machine. Good: We need a better e-commerce website Better: We need software to build better e-commerce websites. Best: We need software to attack this problem differently.
3. Build it, get feedback, iterate.
Your problem is that you're not challenged enough on something important enough. Do this and you won't be bored. You will also know once and for all if this is really for you.
Sitting there and wondering will never bring about a resolution to this.
The sooner you do this, the sooner you'll know and the sooner you can get on with the rest of your life. Delaying it means you delay the pain. It's got to happen sometime.
If you live in/near an urban area perhaps you could try finding a co-working space to work out of. You might get lucky depending on where you live and find one with mostly developers. Changing your work environment might change how you feel about the work you're doing.
Finding a job and deciding you really don't like programming even with the work structure and peers also would not be the end of the world. If this is the last job you have doing development, it's not likely that it will have a negative impact on you as you move to a new field.
Being able to program is in too-high demand for you to really do anything else with the intention of getting money.
That being said, you should absolutely follow your heart. My guess is you will come back to it naturally eventually; even if it's just little bits here and there. I see a million times a week how a few hours coding here or a couple dozen hours there could automate the shit out of boring repetitive tasks people do every day; you can at least automate those things out of your own life.
Sitting in front of a computer all day really isn't a good way to live. It's a good way to make a living; but you should definitely follow your heart.
One way I try to stay interested is finding a segment in which I have no business knowledge. My most recent change was commodities trading software. Using the same tools and language that I have for the last 7 years or so(C#, winforms/ASP, sql) with much more complex problems, so I stay interested.
That may or may not help, but it sounds like you are still young-ish, so maybe you just need a change of scene? vacation? time to experience life? recharging your batteries may do you some good.
Instead I bought a MacBook last thanksgiving and built an iPhone app that Apple featured and subsequently sold very well. The Mac world was a completely new area as well as mobile (was doing enterprise software). It has made programming fun because I also run a small business with it. In addition, running a small business I'm using open source software to build my new website and learning python on django has been a pleasure.
At least for me programming is fun again, but also because it's helping towards my goal starting a company.
Does that job seem particularly appealing to you? Why? If you can come up with good reasons, by all means go for it. If you can't, why go do something you're worse at (and presumably will be paid less for) if you're going to be similarly unfulfilled?
Your feelings are totally understandable. I just think you're giving your current occupation short shrift if you're weighing it against the abstract concept of "doing something else", even if you have a general field in mind. Every job has its downsides, and you need to be able to weigh those against the ones you're painfully aware of with programming. Until you have a concrete idea for another job, you can't do that.
But right now, you sound burnt out. Forcing yourself to code more probably won't help. Get out and do something different for a while. I bet you'd find the programming itch coming back after not too long.
I didn't want to know about programming anymore, I was almost completely burnt out and needed a new direction to save my love for programming.
I took some time to think and reflect upon what I wanted to do next. Then it hit me, what I really needed was a new goal for my programming skills. That's when I knew what I needed was to programming in a different light: now that I have mastered the skills to program basically anything I want I could focus on the "creating, make it happen" part of programming.
So, I think what you need is to find something worth doing with your mastered skills. Center your focus on finding that thing, the masterpiece you will make now with your new found conscience.
But the wise advice is not so wise: those years already invested are sunk costs. Ignore them.
Compare the potential job satisfaction of switching with the possibility of falling behind your peers a year in programming.
I decided to quit pursuing technical excellence and heavily thinking to switch career to either DBA (I've been taking database courses at a local polytechnic college) or Sys/Net-Admin. More of the "Ops" kind of career for many good reasons.
I realized that what I like is to build software from a non-programming perspective (architect, designer, owner). So I decided to look for a lucrative yet stable career, save my money for the long run, and outsource programming jobs.
I know people have distaste with the word "outsource". But outsource doesn't necessarily mean to India. It could also mean to contract out part of the programming jobs to a local talent. I also have the advantage of being born on the other side of the world (somewhere in SE Asia) so I have 2 talent pools to choose from.
I viewed my moves as a series of problem solving steps. Perhaps you should too.
During my break i tried to manage other programmers to program my ideas, but it didn't work very well (only one project, that paid my expenses, was launched).
PS: Just donāt stick with a job you hate itās rarely worth it.
I've tried a few different things to break the rut (chronological listing): - full time 9-5er for a year - 3 month internship working at a cool start-up - freelancing from home as an independent contractor
Every time I start a new programming job I feel excited, but that feeling quickly disappears and I fall back into the same rut.
By taking breaks from programming I've only been feeding this cycle.
I've had thoughts of pursuing a career where programming is only 50% or less of the job.
Have any HNers been successful doing something like that? By starting a modest start-up perhaps?
Focusing on developing a physical product to sell online could be really fun and would seemingly entail doing lots of different things, most importantly using programming as the means to sell online and not the core work.
The lack of "challenging problems" is not the problem. Many people complain that things are too challenging to be enjoyable.
Take a vacation away from your daily routines. Just don't think about your problems for that time. When you come back again, you'll then have a bigger picture of things.
The real fun is not in solving "hard" problems. The solutions to many "complex" looking stuff is rather simple. However, we all decide that we need to have a "complex" solution for things to be fun. Don't complicate stuff.
Just try getting a different viewpoint on things. Since you're a good programmer already, it's better to use your natural talent for the better. There are a lot of problems out there which might require your expertise.
(1) Elicit Business Requirements (2) Design Technical Solutions (3) Coordinate Project Activities
My advice would be to find problems that you can't instantly think of the solution to. Whether that be a startup or whatever, you need more challenge.
To answer your question though...
Try to quantify what kind of impact your work had to either the top or bottom line and avoid talking down the team or technology used.
Barring that, talk about what kinds of problems the project solved and what it helped the team/group/company accomplish.
If you can't even do that, then I would just mention the workplace and job title and talk up other parts of your history and/or skill set
Unless the gig was very short (and so can be safely omitted), there's no reason to be coy about simply listing, in objective terms, where you worked and what you did. If you like, you can simply go into more detail (lines / bullet points) about the positive experiences, and less detail about the negative ones.
Also, you can safely "couch" negative experiences (like being fired for no particular reason, or effectively forced to quit by some domineering jerk) in various ways, like for example when it comes to listing references -- because it kind of looks bad not to have at least one reference for recent gigs, at least -- to simply not give the phone number of the obtuse junior manager which was the main reason you quit anyway, but listing instead a compatriot developer, perhaps still bound to his desks with golden handcuffs, but who knew the deal about what was going on in that sorry place, and won't be shy about putting a positive spin on your time there.
Basic idea being is that if you must convey negative (or simply lackluster) information about a former employer, it's vastly better to let someone else do it for you.
Or if you must deal the poop yourself, at least try to soft-pedal it so that the basic truth gets across (while still not sounding like you're nursing a grudge): so instead of saying "OMG they were so clueless", true though this may be, you can say things like "well they weren't really interested in trying new ways of doing things, so ultimately I felt my talents were underutilized."
Something like: "Despite my numerous attempts to convince the powers that be to implement $solution using $awesome_stuff, the policy remained the same: stick with $ancient_pile_of_dog_poo. But a job needs to be done, and so it was."
This has the advantage of suggesting that you will do what you're told - not neccessarily without trying to have your say first, but eventually, the job gets done.
As the boxes are random, and the order is unknown, and there is no hidden information passed between each prisoner, and the room is reset each time - the only controllable factor the prisoners can agree on ahead of time is the strategy for which boxes each one will open.
Given the boxes are already randomized, using a random order is no more useful than using a sequential order.
So assuming they know the layout of hte boxes (is it 100 in a line or 100 in a square... presumably this can be figured out or some other strategy accounted for so everyone approaches things the same way) - each person opening 50 boxes has the same odds of finding their name. To maximize the odds of the entire GROUP finding their name, we need to ensure that each box is opened the same number of times by the end of the exercise. As we can't pass any information back and forth, this is the best we can do.
First 50 people open the first 50 boxes.Second 50 people open the second 50 boxes.
Or - as they may or may not know their position - they only need a strategy that ensures that each box is opened an equal number of times by the end.
To me that still looks like (1/2)^100..... which by definition isn't the answer - so I'm missing something. Eager to see the answer.
Each prisoner finds the room in the same state as each other. After opening the boxes they are subsequently closed again before the next prisoner. I believe this was intended to be inferred from:
... they will not know anything about the previous prisoners' experiences ahead of time.
There is a modification of the "obvious" solution that even works if the warden knows the prisoners' strategy beforehand and behaves in a maximally pessimal (from the prisoners' point of view) manner.
Next prisoner uses a binary search to find his name in the first 50. Should have to open 6 boxes (log2(50)), if he finds it in the first 50 great. Either way he then sorts the next 44 boxes. Chance around 88%
3rd prisoner sorts the remaining 6 boxes, and finds his name in one of three piles using binary search. Chance, 100%
All remaining prisoners can use a binary search. log2(50) + log2(44) + log2(6)
I don't know how to integrate the 50% -> 88% chance, I'd estimate the answer to be around 44% based on my gut.
If the prisoners don't know the order they enter the room then they should each turn the first unturned box sideways to communicate the state of order. eg. if the first box is turned sideways you are prisoner #2.
I don't know if this is a brain teaser or just asking how to calculate the chances of 1/2 50 times in a row. (eg. the probability of correctly predicting 50 coin flips in a row)
Success rate: 100%. There probably are other constraints but I can only guess at them (do they visit the room one by one, and must they decide on a box to choose before leaving? Who can talk to whom? Must they close all boxes before leaving the room?)
Warning: Don't spend hours of lateral thinking trying to solve this puzzle unless you have a degree in mathematics.
The rest of the prisoners should be able to easily find their names within 50 trials.
Success rate is PRETTY close to 50%.
Note that many of the articles here are totally stack agnostic, too.
First, by chasing what some other people think is sexy technology, as opposed to going with what allows you do Get The Job Done, and quick.
Second, your misunderstanding on what the markets care (which is, well, marketing for the most part), and don't care about (eg your technological stack). None of these the things outlined in your post will make any difference whatsoever on your ability to chase lucrative market opportunities.
Third. Despite what some people here might write, "Hacking" -fiddling with technologies, and gaining a deep insight into them- is completely technological agnostics. You can be a hacker, even in VB.NET; it just happens, that some of these technologies has a better "average community member insight" factor, than others.
Thus, your question really boils down to something more fundamental: are you into "hacking" for the tech, or for the people? In the former case, it doesn't really matter whether you'll use MS, or Python, or what the state of the current MS devtools are -just that you gain a deep understanding of them.
In the later case, you should put your investment into people -the ones you'd want to connect with, anyway- and let the appropriate tech emerge from it naturally.
At my last startup job we used the microsoft stack very effectively - the cofounder was a microsoft guy, so that's what we used. Not a big deal.
My first experience was in VB and then C#, and I love ASP.NET MVC and still use it for some projects where it makes sense. But having learned other languages I've learned what the limitations of that technology is, and for most things I work on nowadays Microsoft technology is not the best solution.
Depending on what you spend time learning and what types of problems you work on, you may come up with different conclusions, and that's totally valid.
However you are absolutely right about Microsoft. Yeah they doing good lately but from which standpoint? Microsoft has a really bad reputation under hackers and I think the reason is not that we all love Apple and Mac's. No, I think those reasons become clear if you look at what Microsoft is doing all the time, what are they implementing, how are they implementing new technologies.
For example Internet Explorer 9. This time Microsoft has to be really good cause they are losing market share month after month.And luckily Microsoft did understand that and they are doing good with Internet Explorer 9 but again they are making things their own way and that's what is bad about them.If Microsoft thinks it needs something they are always developing it on their own without looking what other developers are doing and how they solved those problems. No, they have always this one Microsoft solution doesn't play really good with the rest of the world (and sometimes even with Microsoft software).That's Microsoft.
However I think you are on the wrong way. If your profession is Microsoft technologies and you want to stick with that cause you have a job and you like Microsoft platforms then you should stick with it and become better and better.
But look what other developers and hackers are doing, which new thinks are coming, which things are slowly going and compared to that what is Microsoft doing.Don't turn into a developer who has a Microsoft hammer in his hands that's the worst thing you can do for the world and for your career.
I hope I could help you.
BTW: I learned programming with C#
I've worked in the .NET stack for about 5 years now. It is a real pleasure to work with. When I need to get something done, I know I can do it easily, and without problems. And seeing the recent developments of Java with Oracle, I feel my decision was that much better.
If you want to work for a startup then you'd probably need to learn open source tools (though startups use the MS stack, too). You might also find that a detour into OSS helps you bring fresh ideas back to your MS work.
If you need a job and/or like working with MS stuff, then stick with that (and be shamed on HN ;).
If you want to build a product, then it doesn't really matter--it's more important to bring something successfully to market.
1) Are you looking to have a safe job type career?
2) Are you trying to build something that you have in mind?
Go on working in whatever language or technology you want, and don't listen to the idiot zealots who aren't intelligent enough to broaden their horizons to the point where they understand that ANY language is cool if it provides the customers with a viable solution that scales.
Spend more time focusing on theory and less on stack.
As for stack advice, pick what you want to do.
Solve problems with what you are most effective with.
Have fun, use the lang/os/lib/whutnut make you smile while doing it. :-)
Apply above 3 points and hack! (Repeat as needed.)
Their tagline is "People doing strange things with electricity" - in my experience you end up with a fascinating crowd of people hovering somewhere on the borderline of hardware geeks, software geeks, artists, and pranksters.
They've got a meeting next Wednesdsay in SF - I've made some _great_ friends via Dorkbot in SF as well as Sydney (where I live) and Seattle.
(If you go, find Karen and tell her Big says "Hi!", and there might be an Australian girl named Pia visiting, tell her I say Hi too!)
Choose a low valuation so that you can be friendly later in life if this is successful.
I personally believe in reverse-vests for a super early hire like this: give him the chunk up front, and execute a (pre-agreed-on) clawback if it doesn't work out in the timeframe you guys agree on.
Anyway, I don't think it sounds like you have the attitude needed about this person to bring him on as a full co-founder. If you call it that, and it's not a co-founder situation (as in, you both bring an equal say to the table and are roughly equivalent in value to the corporation), one of you is going to be unhappy.
Honestly I wouldn't bring on a co-founder unless the risk was equal. His payment for now should be the Shares that he will get for being the Co-Founder until the business starts bringing in Cash.
This may be a good start for someone who finds time to build one =)http://www.irs.gov/pub/irs-pdf/n1036.pdf
A publically routable IPv4 address...
Ordering drinks/food via wifi...
Sounds interesting and you have a great lineup!
The harder option is to contribute to an existing project. This is not an easyquestion, but I'll try give you a concrete example.
(Disclaimer for others: I'm Nick's coworker, so I know more about him and whathe can easily do.)
I contribute to Mercurial. There are two parts of Mercurial that could usesome help from a frontend developer. The first is the Mercurial websiteitself: http://hg-scm.org/
The code for the site is on BitBucket: http://bitbucket.org/segv/hg-website
If you want to improve it, it's as simple as forking, making your changes andsending David a pull request. The site uses Jinja templates, so you shouldn'thave much of a problem with them (Nick works with Django every day, for thoseof you that don't know him. Django templates and Jinja templates are verysimilar.).
Mercurial also has a built-in web server whose templates need some seriouslove. The code for those is here (the gitweb, paper, monoblue, etcdirectories): http://www.selenic.com/repo/hg/file/tip/mercurial/templates
Mercurial's templating language is pretty much a huge clusterfuck for webdevelopment. We've been talking about replacing it with something else but ithasn't happened yet.
There are two big, huge, ugly problems with both of these options. The firstis that as a frontend developer you need a designer to tell you what toimplement, unless you've got some aesthetic sense yourself. I know Nick candesign fairly well, so that's not an insurmountable issue.
The other problem is that you'll inevitably encounter people with differentdesign tastes than your own, and your contributions might not ever be acceptedbecause they don't like them! Design-by-committee is a Sarlac pit of goodintentions, angry words and ugly results, but unfortunately that's the attitudeof many programmers toward the projects they contribute to.
Even though these programmers may have websites that look like they crawled outof 1998, their opinions on frontend and design work hold a lot of sway becausethey contribute to the guts of the project. I don't think that's a good thing,but I'm trying to be realistic here.
With backend code it's much easier to justify your patches -- who's going toargue when you send a patch and say "this improves performance by 20% accordingto these benchmarks and passes the entire test suite"? Frontend code (anddesign) is much more difficult, and the results (rejected patches) can bedisheartening.
My advice is to do a few things, in order:
* Talk to the project's community through IRC or mailing lists, and tell them that you'd like to redesign and reimplement the frontend-related stuff in the project. If they're not at all receptive, move on to another project.
* Find a contributor and talk to them. Make a friend. They'll be useful to bounce ideas off of and can help you when you get stuck on something backend-related.
* Find a designer to work with so you can make something beautiful that is hard to reject.
* If at all possible, make your contribution pluggable. For example, instead of modifying one of the theme's in Mercurial's core, create your own theme. That way people can try it out easily before it's merged into core.
* Submit your patches and be prepared to argue for your design against the guy that thinks all websites should span the entire width of your browser window.
However one of the big issues with innovating in this space is that HR departments are generally quite conservative so it's hard to sell innovative products to them (look at the difficulty SnapTalent had with their initial product).
You'll probably have more luck selling to third party recruiters who are more risk tolerant.
There's about a dozen companies currently doing the whole social network recruiting thing, but none of them has serious traction, and I'm not personally convinced it's a model that will work.
I'm working on this problem by building a niche job site, it's not hugely innovative technically, but it should help with the relevance problem and also be traditional enough to appeal to HR departments.
One of the other ideas I had in this space was building a platform for matching recruiters to candidates, so recruiters could send targeted messages to candidates matching a set criteria (+using game mechanic techniques to stop spamming). If you want to talk more about this idea feel free to drop me a message.
The main problem with job sites is matching jobs to applicants. As far as I know noone has gone beyond simple keyword searching. If you had an actual userbase you could make use of collaborative filtering techniques (like Amazons recommendations) to provide a tailored service to each user. CVs, personal blogs and github accounts give you enough information to seed each users recommendations even before they start rating jobs.
Recruiters literally have no idea of what makes a decent candidate so they have to resort to simple (almost syntactic) measures - 6 years of C++, Oracle etc. where they have no idea of what those terms actually mean or how useful they are (what Oracle product - there are zillions of them).
I'd quite happily delegate filtering of candidates to people I trust and if they get paid for doing it then it is a win-win situation. If you had a site with effective workflow to manage each stage of the process then it could be pretty slick.
[NB I spent quite some time on this idea a while back but parked it to work on other ideas].
One model might be a curated niche of job postings for whatever niche you would understand the most. Then you need a way to reduce the talent pool the HR department sees.
One way to do this is give the job applicant a way to do a 'quick pitch' and the HR department can click a button called 'Tell me more' and the jobs process can go from there if both parties are interested. Maybe you could display stats as a way to incentive certain actions. If a job applicant has applied to 300 job offers with a cut and past and has only got 3 tell me mores, that would show to to the HR applicant. If however, a job applicant had a 98% tell more more rating on 30 job applications that means he's probably customizing it and the HR department can tell he probably has a pretty good EQ.
For job-seekers, the marginal cost of one more application is too low, so companies get too many applications. With too many applicants, filtering becomes more random, so the reward for applying for a job you are only tenuously qualified for increases. It's a classic hawks vs doves with a big payoff for being a hawk amongst mostly doves
So, make it more expensive to apply for a job. Two ways I can think of doing this:
1. Charge applicants ten bucks to apply for a job. Have companies report if they were good enough but they found someone better. In that case, give them a refund. In all other cases, keep the money. (EDIT: This may possibly be illegal in some jurisdictions, but there are doubtless ways around that.)
2. Show companies how many jobs the applicant has applied for recently (not necessarily where they have applied, but you could perhaps positions/business areas) and/or restrict applicants to N applications per month. Aggressively detect and ban sock-puppetting ā" perhaps you can require verified ID of the applicant's name and get companies to check that is the name of the person applying.
You could also make things less stressful by operating on a say weekly or monthly cycle. Jobs are posted at the beginning of the month, applicants choose which N jobs they want to apply for, applications go out, new cycle starts. This avoids stampedes and requires applicants to be discerning.
a) Ads posted by Recruitment Agents giving me no idea who the actual employer might be.
b) Ads with no sensible salary hint.
On (b), I don't mind there being a wide band (e.g. 25-60K, depending on experience), as at least that is a hint. What I really hate is "Competitive" or "Neg+Bens" and other such non-information.
When you contact them you should request a proper size logo, be sure to uphold the image quality.
In my experience, companies are generally excited.
Okay, if you reeeeeaaaaalllly want to learn what's going on. Copy and paste some of the sentences you are writing for people into Google. You will immediately find your articles.
Analyze how those sites are monetizing.
Remember those keywords you centered the article around? Type those keywords into Google. Did you just find that same site? How many Google result pages did you have to click through until you found it. Watch that site in the listings for a few weeks. Is it getting closer and closer to the first page?
If not, dig around until you find one of your articles on a site that is for it's main keyword.
Go to yahoo.com - in the search box type in 'linkdomain:example.com' (no quotes and replace example.com with that domain).
How many backlinks does it have?
Next week, when you search for that keyword again, did the site move up in the rankings? If so, then go back to yahoo and see if the backlink count increased. Did it? It definitly should have if it moved quick enough in the Google search results.
Look at all of the sites that are linking to your articles site. How did that webmaster get those links?
I think I quickly spelled out the complete overview here. The only thing I left out was finding choice keywords to target. That's an art. No ones going to give you anything except general knowledge, otherwise they would be hiring a guy offshore to write articles centered around a keyword ;)
you write a small-ish informational website on a topic, you use SEO to try and get your site higher up on the search results list so more people will visit, and then you attempt to funnel people into ads or referral links for products.
> And on another note, what is the effect of domain name on SEO
top level domain is somewhat better, but other things matter more.
>Get a keyword rich domain name
>Get some articles going on with that density. And put them on that domain making a mini info site.
>Put AdWords on it (earlier Google did approve their accounts and they can keep using it if they play nice.)
>Submit some articles to article directories and get back links.
>Keep getting back links.
>You rank high for that keywords(S) Traffic Rolls in and they click on adverts. You make the money.