+7
Under review

Set a goal for programming per day

Michael Calkins 11 years ago updated by Paul Sinclair 11 years ago 5

I would love to be able to keep an average of programming up and be able to have codeivate tell me when I am below my "goal" however that is measured.


Then I could look over the past week and evaluate how well I did in accordance with my goals.

Answer

Answer
Under review

Good ideas! I think I might start off by calculating the average number of points earned for each language by you and the general population, and then maybe using this to help people set goals. I.e. setting a 10% improvement on last week, or showing your best ever day and trying to beat that (like a ghost mode in car racing)

+1

Cool idea.

I see 2 problems:

  1. The average characters you type coding in a week is language specific, meaning that 10,000 characters of html is not as hard to write as 10,000 characters of python. (come to think of it, this could go into a feature request all on its own)
  2. This is more a problem that's nigh impossible to solve, but you can't accurately measure productivity by number of characters, because unlike a writer, less lines to do more is generally better.

2 is impossible, but 1 isn't. To solve the language issue, use a "global average" that would combine all languages. To get the "global average", you would average (points gained per day - average points per week / 7) for each language. Positive = progression, negative = regression, 0-ish = about the same.

(I undoubtedly made a mistake somewhere here ^, take it with a grain of salt)


A possible visualizer for this would be a string like "119/273" just before the "65.33% [Plain] streak 4 mins" that would show "current points / goal points".


Additionally, it would be possible to slowly raise the point goal, to encourage more and more each day.

@Alex

Having less code maybe the case but even then you have to type to create less or more code.  If you aren't typing at all you aren't programming anything.  I'm building a massive app right now and it breathes.  I take out a bunch of stuff and then start building it up again in another way (feature, methods, or w/e).


You're right though I was kinda vague about this, specific the goals should probably be a combo of:

- A language of your choice.

- Show your current daily average of that language.

- Enter how much more you'd like to program of that. (aka points)

+2

My bad, I was thinking about it as the total code you have left as a finished product, rather than the work (typing) that it takes to get to the product.


Hmm, I was thinking about the goal as a sort of autonomous thing that would be determined based on previous work. I think that if this was implemented, it could be a hybrid of our 2 ideas: allowing the user to target specific languages by specific amounts, and otherwise defaulting to a more general "progress further" goal (that the user could choose to specify).


Also, how will a user know how much work goes into x amount of points? I think that there should be some sort of scale that the user could view, like "you made 123 points yesterday" or "last week, when you were coding, you averaged 123 points per hour".
+1

So points at the moment are earned 2 ways.


1. languages: basically each action you perform in a language you get a point for it so if you opened a CSS file and hit

 "a", "backspace", "ctrl + v (which pasted say 100 chars)" 

that would give you 3 points for CSS. Only things that modify a document give you points, so hitting arrow keys etc won't count.


2. focus points code for 10 mins get 1 point, 20 minutes 2 points (plus your first 1 point) etc



At the moment on the summary page www.codeivate.com/users/paul (or www.codeivate.com/summary) the gold / yellow bars and +1's show points earned on the last day you coded (rolling over first time code is uploaded after midnight)


So on top left above level you can see total points earned (focus & language points) and then see a break down on each language of what points you earned that day. 



Also there is the http://www.codeivate.com/dashboard page which gives a high level summary of points you earned over the last week and http://www.codeivate.com/trends which shows points earned by everyone vs you over the last week.


I think I need to rewrite the dashboard/trends page to maybe use d3js / a better graphing library so I can show points earned by language as well as adding in a few of the ideas that you and Michael are talking about:

  • points per hour/day/week
  • points per language per hour/day/week
  • manual / guided targets
I think this will need some testing because my hypothesis would be that I have some times/areas of code that I work where I get "lots" done vs other times/areas of code. Maybe language based targets for a day/week are better than for an hour?
Another alternative is could be like this http://codepen.io/p4ul/full/jGFyw but instead of battling somebody else you could battle yourself last Tuesday, or the best day you ever coded etc.
I will have more of a think about this. 




Answer
Under review

Good ideas! I think I might start off by calculating the average number of points earned for each language by you and the general population, and then maybe using this to help people set goals. I.e. setting a 10% improvement on last week, or showing your best ever day and trying to beat that (like a ghost mode in car racing)

I think he's onto something.  On /users/paul it's basically already made.


You could do something like.

$goalsAchieved = ((My progress in HTML) + (My progress in PHP)) - ((My goal for HTML) + (My goal for PHP)) > 0;

If that is true then your overall goal for programming would be achieved and since it counts "document changing key"/"backspace" the changes you're making would go towards your goal.



Paul I wanna see that battle for the week and have it update in real time! ;)