To download the application, simply click on the download button below. This operation will download the installator for Windows 7/8/10. No version for linux operating systems is available.


Development of this application took some time. I would be gratefull if you donate to this application as a way of payment. Any amount of funds are welcome, a single dollar would be great even to keep this site alive.


ProgrammingProgress is a desktop application to help measuring effort put into developing software.

The main goal of this application is to provide a tool that allows to count lines of code written in any arbitrary language and assess if the progress is related to the growth of the project.

Of course, we all know that sometimes the lines of code shrink due to refactoring done to the code. This issue was taken into account so the application allows to mark counted lines as a refactoring point. This way you can store the story of your project and think more in terms of what really has been done.

For personal use the application offers some benefits for the developer, mainly psychological benefits but also can solve some issues with time management. The main psychological benefits are as follows:

  • Knowing how well the project develops in relation to it's logic complexity you can tell how well you perform
  • Taking into account your current knowledge of the project language, the tools, the ecosystem and the libraries in relation to the amount lines you have written or refactored you are able to assess the state of your competences for the job
  • It's simply nice to know how big is the project, as we all love big numbers

The practical benefits of counting lines of code come into play, when you work on multiple projects simultaneously. Knowing how much effort you've put on each of them, you can tell which project needs more attention and engagement. This allows for better planning by making decisions where to put the programming effort. Of course - it all takes some intuition and experience from the developer to really tell how well he performs and how advanced his projects are. To give you an advice, what you should do about your assessment skills its important to:

  • Watch similar, good projects in terms of code written
  • Read your's project language documentation and know if you used it's clever tricks

For beginners it's good to know that writing good code does not necessarily mean writting code that is super smart. The point of balance here lies between code readabilitiy, maintainability and performance. Due to the most popular rankings the application is targeted at the most widely used programming languages. It also takes the programming languages defined by the user. Each programming language is associated with one or more file extensions, which are the language specific source file types. It counts three kinds of lines:

  • All lines - all the lines in the file
  • Filled lines - lines that are not empty
  • Empty lines - speaks for itself

The issue here, you can see is there is no place for comment lines. My though on this is that comments in the source code are integral part of a project from the standpoint of the developer. Comments allow for a better understanding of code and without them it's hard to read the code by other person, or even by the author himself, later when he comes back to the project. So by the importance of comment lines the design decision of this application was to include them in the project lines filled lines category. Also note that this isn't a full blown code assessment application. The goal here was to provide and user interface for the above task so the user can perform counting quickly and store the history of line counts.

The user interface

The user interface of ProgrammingProgress is pretty easy and straightforward. After you start the application, a window will appear:

On the left side of the UI you will see the pane of all the projects that have been created or opened. The term “project” refers here to a an ongoing porgramming project that you work on.

On the right side you will see the project name, it’s languages list and path to the project. You will also be able to see how many lines it has, as mentioned above categorized into three groups, that is: “all lines”, “filled lines” and “empty lines”. There is also a button to perform count of lines on the project with two checkboxes - “perform write”, and “is refactoring point”, which we will talk about later.

Creating a new project

The first thing to do is to create a new project. To do so go to File -> Open/Create project and browse to a directory that is root of the programming project:

After that you will be prompted for a name of the new project. By default, the suggested name is the project directory name:

After naming the project you will be prompted if you want the application to automatically detect the languages used in the project:

In this example, answering „Yes” to the question will bring the following window, with project languages with the automatically detected languages: Here you can add a language from the predefined ones. But for now lets just stick to the automatically detected ones.

After pressing „OK” button, you will be taken back to the main window of the application, where, on the left side you will see the new „ExampleProject” added to the projects list, and on the right side you will see the new project name, it’s path and the languages it uses:

Performing counts

Now it’s time to perform first count. The „Count” button will perform the lines count on the project, if you press it, the program will perform count on the project and will display lines amounts in the „Lines” section:

This operation will not write any data to the project file, unless you check the „perform write” checkbox. If you check it, and press the „Count” button, you will see that the history chart will appear with the first point in the middle: You can hover the mouse over the point, so you’ll see an exact measurements of all lines, filled lines and empty lines:

After a while, after writing few more lines of code, you can perform the count with the „perform write” checkbox checked. You will see that the graph now displays a line: The line indicates the lines count of "all lines" in time.

Another feature is how to support the act of refactoring, where amount of lines usually shrinks. To indicate to the application, that the next count will be based upon the fact that refactoring occured, just check the „perform write” checbox, and then „is refactoring point”:

Hit the „Count” button and you will see that now, after you have refactored the code, the line will go down with a blue color:

Navigating the chart

After some more work, you will have more counts and the project history chart will grow. By default – to navigate the chart you can roll the mousewheel forward to zoom in and backward to zoom out. When zoomed you can click and drag with the middle mouse button to left or right to scroll through the chart. For example, if the project’s chart looks like following: A single scroll forward, while mouse is over the chart will show the following:

At the bottom of the chart you can also set the amount of days of the history to show. By default when a project is loaded or selected from the left pane’s projects list the chart will display the whole history. Entering an amount of days and pressing the „Show” button will show that many last days of history. You can also enter the amount of days and press Return key or Numpad Enter on the keyboard.

Deleting history entries.

While hovering mouse over the points of the chart you can left click to select an entry and delete it pressing by Delete key on the keyboard. You will be prompted if you really want to carry on with the operation because it cannot be undone. The deletion causes the chart to refresh and redraws the history as if the counting point never existed. This is useful in cases, when you have accidentally counted and written the changes, as well in situations, where you see a point redundant or want to spread out the chart.

Working with existing projects.

To open an existing project head onto the File→Open/Create Project… and browse to the root directory of the project: When you choose it and accept the selection, an existing project will be added to the projects list on the left of the main window and loaded into the application as the currently selected project – it’s data will display on the right side, along with the history chart, which will appear below: Having more than one project loaded into application you can open it either by the File menu or by double clicking it’s name on the left pane’s projects list.

Adding languages to project

As time goes you might want to add languages to your project. In order to do so open up a project and under the project name, right of the project languages label, click the „Change” button: A dialog will appear with all the languages associated with the project: Here you can add a language by pressing „Add language” button or remove any existing language by selecting it and pressing Delete on the keyboard.

If you click on the „Add language” button, you will be introduced with a new window with all the languages defined so far: Here you can select multiple languages to add using the well known Ctrl and Shift key modifiers and clicking the list items. Here you also can define new languages. But for now let’s stick to the project languages that will be added to the project. You can press „OK” button, when you are done. You will be taken back to the „Project languages” window with the new languages added: The changes are automatically saved after you press the „OK” button. Now, when you perform the count, the new languages will taken into account.

Defining new languages

To define a new language you must click the Settings menu and click on the Languages... menu item. You will be introduced with a simple dialog with all the languages that are already defined: To define a new language press the „New language” button. The „New language” dialog wil pop up: In order to define new language a name of a language must be given with file extensions associated with that language. So the first step is to name the language. Following that it’s necessary to add some extensions to the language that is being defined. To add an extension type the extension name and click the „Add” button or press the Return key on the keyboard. After you’re done, just press the „OK” button. The new language will appear in the Languages window.