
A list of practical projects that anyone can solve in any programming language - emersonrsantos
https://github.com/karan/Projects
======
eridius
My go-to for this sort of thing has always been Project Euler
([https://projecteuler.net/](https://projecteuler.net/)).

~~~
careersuicide
I've posted this several times, but...

[https://github.com/seaneshbaugh/rosetta-
euler](https://github.com/seaneshbaugh/rosetta-euler)

It's an ongoing thing I work on when I'm not working on anything in
particular.

~~~
saagarjha
I'd like to mention that Project Euler states that they'd prefer that people
not publish the solutions publicly:

 _> I learned so much solving problem XXX so is it okay to publish my solution
elsewhere?

It appears that you have answered your own question. There is nothing quite
like that "Aha!" moment when you finally beat a problem which you have been
working on for some time. It is often through the best of intentions in
wishing to share our insights so that others can enjoy that moment too. Sadly,
however, that will not be the case for your readers. Real learning is an
active process and seeing how it is done is a long way from experiencing that
epiphany of discovery. Please do not deny others what you have so richly
valued yourself._

Just saying.

~~~
sethrin
That "epiphany of discovery" may be a good feeling, but I disagree with the
idea that knowledge should only be bought with hardship.

------
gruez
>SQL Query Analyzer - A utility application which a user can enter a query and
have it run against a local database and look for ways to make it more
efficient.

Non-trivial if "look for ways to make it more efficient" means non-trivial
suggestions (ie. not "add moar indexes").

------
karangoeluw
Hi all. It's Karan here - the creator of this repo.

Thanks OP for posting the link; I'm glad to see people like it. I'll be
reading comments here, so keep 'em coming. ;)

------
thearn4
Thanks for sharing. I'm putting together materials for a course on data
structures that I'm teaching this fall.

I have the theory part covered, but I'm always on the lookout for things that
could make for decent practical assignment problems - reasonably attainable in
scope, but without being too contrived.

------
lanna
> Prime Factorization - Have the user enter a number and find all Prime
> Factors (if there are any) and display them.

not to sound pedantic, but for any integer greater than 1 there is always at
least one prime factor:
[https://en.wikipedia.org/wiki/Fundamental_theorem_of_arithme...](https://en.wikipedia.org/wiki/Fundamental_theorem_of_arithmetic)

edit: for prime numbers, it is the number itself

~~~
wayn3
and "1" does not, so the thing youre trying to be pedantic about isnt even
wrong.

~~~
e12e
True, and when talking about "numbers" one would generally include 3/7 and
maybe _e_ , negative numbers and perhaps complex numbers... or at the very
least negative integers...

~~~
wayn3
all of which have prime factors ;)

besides, you may as well consider 1 a prime factor. the task is just a silly
programming toy problem. 1 not being prime is pure definition, including 1 in
the primes would not materially change the definition of primes. just make a
lot of advanced math tedious to write down.

~~~
gizmo686
The Real numbers do not have any primes. Every real number is a unit.

EDIT: Because it gets brought up so often, I want to respond directly to the 1
being prime point. Saying this is true purely by definition is only true in
the highly technical sense that we could make the definition whatever we want.

One of the core properties of primes is Euclid's lemma, which states that if p
is a prime and p divides xy then p divides x or p divides y. Symbolic, this is
p|xy => p|x OR p|y.

Indeed when we generalize the notion of "prime" from the integers to arbitrary
rings, this "lemma" becomes part of the definition. In fact, even
"irreducible" elements, which is a strictly weaker requirement than prime
elements, excludes units (such as 1).

~~~
gjm11
The property "p|xy => p|x or p|y" does in fact hold for p=1. (The conditions
on the LHS and RHS are then true for all x,y.) The simplest formulation of the
condition for irreducibility (p=qr => q=1 or r=1) is also true for p=1.

Taking 1 not to be prime is, none the less, pretty clearly better than the
alternative. Here are a few examples of neat things that would break if we
took 1 to be prime:

When p is prime Z/pZ -- i.e., "integers mod p" \-- is a field, meaning a thing
in which you can do +,-,*,/. This would be false if we allowed p=1, though
admittedly there's a not-too-crazy way you could change the usual definition
of "field" that would fix it.

The "fundamental theorem of arithmetic": Every positive integer is the product
of primes and this product is unique up to rearrangement. This would be false
if we took 1 to be prime, because you can always add or remove 1s from the
factorization.

The famous Riemann zeta function (zeta(s) = sum over positive integers n of
n^-s) has a representation as an infinite product: zeta(s) = product over
prime p of (1-p^-s)^-1. For a little example of why this is nice, note that it
provides an instant proof that there are infinitely many primes, because as
s->1 zeta(s)->infinity, which would be impossible if that were a finite
product. This would become nonsense if we allowed p=1 because one factor would
then be 1/0.

Prime numbers all have exactly two divisors (1 and p). This would become false
if we took 1 to be prime.

------
icc97
There is also the 99-problems sets, started in Prolog [0], then Lisp [1],
Haskell [2], Python [3], and more.

[0]: [https://sites.google.com/site/prologsite/prolog-
problems](https://sites.google.com/site/prologsite/prolog-problems)

[1]:
[http://www.ic.unicamp.br/~meidanis/courses/mc336/2006s2/func...](http://www.ic.unicamp.br/~meidanis/courses/mc336/2006s2/funcional/L-99_Ninety-
Nine_Lisp_Problems.html)

[2]:
[https://wiki.haskell.org/99_questions](https://wiki.haskell.org/99_questions)

[3]:
[https://wiki.python.org/moin/ProblemSets/99%20Prolog%20Probl...](https://wiki.python.org/moin/ProblemSets/99%20Prolog%20Problems%20Solutions)

------
madsbuch
Great list for inspiration! Though, it is not true that all the problems can
be solved in any programming language: try to make a "Bandwidth Monitor" in
Coq.

~~~
brians
I think that looks like a framework for proving things about the bandwidth
usage of other programs, no?

~~~
madsbuch
You are right :-)

But we could also consider another example: try to return the nth digit using
a regular expression.

------
slaymaker1907
You might add in some basic (useful) encryption like RSA. There's a running
joke in the CS department at my university that every other class has to teach
RSA, so it is not incredibly difficulty to do.

------
djaychela
Thanks for this - I'm just beginning on the long journey of learning
programming, and have been looking for challenges to set myself now that I
have (some) of the basics down (but large, practical projects are still
somewhat daunting).

------
ghubbard
There's also [http://exercism.io/](http://exercism.io/) where you can solve
problems and get/give feedback on the solutions.

The platform is all open source on Github.

------
bloaf
I'd like to make a wikipedia-of-code where each page corresponds to a
"project" like the ones listed here. The project entry would look like a
Jupyter notebook, and you can edit/execute the code freely.

~~~
abecedarius
I made a start on that once with
[http://wry.me/~darius/hacks/howtodothingswithdocs.tar.gz](http://wry.me/~darius/hacks/howtodothingswithdocs.tar.gz)
\-- it runs literate programs in Scheme on the server. Ancient Python code.

~~~
bloaf
I don't know if I'd be courageous enough to run random internet code server
side, but I know there are some people that do. I was thinking about trying to
get a lisp-to-javascript compiler, then use it to compile a lisp-interpreter-
written-in-lisp to javascript, then the notebook would just be a fancy client-
side lisp REPL.

~~~
abecedarius
The part you might find interesting is how it treats pages as modules you can
import (from other pages), and integrates that with built-in version control
(though I never got to the UI for the version control).

Yeah, running it all client-side makes more sense. See my profile info if you
ever feel like chatting about it.

------
rtpg
I've actually been working on this while trying to help a friend learn
programming.

I've been looking for some meatier projects that still have good feedback
loops, without requiring too much domain knowledge.

For example, I've been working through a project with the friend that involves
scraping prices off of a website and trying to build a thing to automatically
order things off of the websites.

Multiple distinct parts, each with their own, very visible, success state. But
at the same time, not too many challenging domain specific issues (main issue
was just explaining CSS selectors and form POSTs).

------
cylinder714
_Exercises for Programmers: 57 Challenges to Develop Your Coding Skills_ by
Brian P. Hogan

[https://pragprog.com/book/bhwb/exercises-for-
programmers](https://pragprog.com/book/bhwb/exercises-for-programmers)

------
megamindbrian
How do you feel about actually solving them in any language and then
documenting the solution?
[https://github.com/megamindbrian/jupytangular](https://github.com/megamindbrian/jupytangular)

------
bonoetmalo
I really like Rosetta Code esque projects. Rosetta Code has been somewhat
abandoned as of late recently though.

------
mekicha
I agree. This is a great list. Will like to see some game projects as well,
and more in the security section too.

------
jnbiche
Any other lists of projects like this?

~~~
wst_
Advent of Code. Not a list but also a set of problems to solve - nice for
learning.

[https://adventofcode.com/](https://adventofcode.com/)

------
grimmfang
Should one consider them self skilled if they can complete all of these
projects with some amount of ease?

~~~
lgas
Skilled relative to...

...most of the population? Yes.

...John Carmack? No.

