
Ask HN: Final year project in CS - knowbody
Hey I need to choose the topic of my final year project of BSc Software Engineering. My uni obviously gives whole bunch of topics to choose from, but none of them are interesting to me. They are super boring (build a website for some uni department, etc.) - BOOORING!<p>I would love to do something outstanding, something what I could show of with to my future employers.<p>I am interested in big data, AI. I was thinking of doing something with drones, or some social media data analysis, or something with computer vision.<p>Any advice?
======
brudgers
Building a website for the archeology department is a real engineering
project. It requires domain knowledge, requirements gathering, specification,
working with stakeholders, iterative design, deployment, and consciousness of
maintainability.

"Something with drones" is not a Software Engineering project. Writing a poem
about drones is enough. On the other hand, if you can show future employers
that you solved AI or Big Data as a senior project, the road ahead will be
paved with yellow bricks.

The critical thing is to show your ability to execute and part of a portfolio
is to provide a familiar context in which to discuss engineering decisions as
engineering decisions.

Don't get me wrong, some students will have really cool ideas for their senior
project. Many of them will have been thinking about it for a long time. A few
of them will just be the sort of person who comes up with cool ideas. It's a
bit late to try and become either type.

Good luck.

~~~
knowbody
I think I see the point you are making here and I partly agree with your
comment.

~~~
brudgers
I'll make my point another way. Trust that [at least some of] your instructors
know something about what a reasonably successful final project for a student
looks like and that there is an interest in setting students up for success.

If there is a lesson from HN, it is that execution matters more than
creativity. [http://sivers.org/multiply](http://sivers.org/multiply)

------
alasdair_
Pick an open source project that you like, fix a couple of bugs to show you're
serious then talk with the project maintainer(s) and tell them you want to do
something that takes 150 hours or so.

The reason for doing something open source is that you can point to it when a
future employer asks. If you choose a "brand name" project, you can get a lot
of kudos for being associated with something like that.

~~~
knowbody
My question is how it can become my final year project? I know I can do it in
the meantime.

~~~
pinkyand
One way is just go into the community of the open source project you're
interested in and ask for projects ideas.

Also searching for "project name" AND "project ideas" could sometimes lead to
good results. for example [1].But of course before choosing a project in such
way , it's better to understand a bit more about complexity and scope.

[1][https://cwiki.apache.org/confluence/display/ISIS/ProjectIdea...](https://cwiki.apache.org/confluence/display/ISIS/ProjectIdeasForStudents)

------
Retric
Major projects take a lot more effort than you might expect. I would try and
have lot's of small milestones that actually do something useful. The idea is
even if you don't get everything working you still have something significant
to fall back on.

------
zorrb
Build the website for some uni department.

Do a good job. With all the time you save, you can focus on doing things with
drones or AI or whatever you want. Then inevitably when the scope of those
projects goes out of control you won't have the stress hanging over you of it
being for school and will be able to explore the domain with a light heart!

~~~
jsaxton86
I wouldn't do the website as a matter of principle.

I helped build a website for a department when I was in college. I was paid a
reasonable hourly rate in exchange for my services. In this case, the OP would
be paying the university money in exchange for the privilege of building them
a website. That's insane.

~~~
sleepychu
This attitude is common amongst my peers. I don't understand it all.

In general any time you do something for CS it's either trivial or if you had
some qualification to back you up you could get paid; you're not paying for
the privilege of designing their website you're paying for the support,
guidance and ultimately assessment of your skills.

There is a problem of larger scope which is that education at a school level
has been poor or non-existent as side effect of this is many people self-teach
and then start university with skills way beyond their peers, web design is a
good example of this because it's a relatively open platform that's easy and
fun to get into, the result is that most universities must start from no
assumed knowledge in the field.

It's only because you were able to teach yourself webdesign that you feel that
the task is beneath you. If you really want to address this problem you need
education to be better across the field so that university level can address
significant tasks rather than filling in the basics for the first 2-3 years.
This is starting to be addressed in the UK by the likes of the Raspberry Pi
foundation and at a government level by mandated CS education in primary
school but without incentives for teachers to take up the subject I don't know
how effective it will be.

~~~
knowbody
definitely agree with you, I think I'm the case you are talking about. I came
to uni with a bigger experience and knowledge than other guys, I don't blame
them. But I don't want to put myself on their level that's why I'd like to
propose my own topic and show my skills there

------
Osmose
My senior project was a Super Nintendo emulator. It worked out well because 1)
there's a decent amount of documentation out there on sites like
romhacking.net, 2) there's usually at least one open-source emulator that you
can use to figure out tricky bits (we used bsnes to help us understand how to
render graphics when the documentation was vague or incorrect), and 3)
emulators are super-easy to demo and verifying if you got it right is easy due
to existing code you can run to test.

------
nieksand
Consider doing some language processing using the excellent NLTK library:
[http://www.nltk.org/](http://www.nltk.org/)

It wasn't on the lists of "wants", but implementing the Raft consensus
protocol could be neat too. It was designed to be understandable and
implementable. The video is here:
[https://www.youtube.com/watch?v=YbZ3zDzDnrw](https://www.youtube.com/watch?v=YbZ3zDzDnrw).
The research paper is here:
[https://ramcloud.stanford.edu/wiki/download/attachments/1137...](https://ramcloud.stanford.edu/wiki/download/attachments/11370504/raft.pdf)

~~~
knowbody
looks ambitious, I'll have a look at it in a bit

~~~
nieksand
For the NLTK idea, I think you can get a long way by adapting one of the
examples from the (free) book:
[http://www.nltk.org/book_1ed/](http://www.nltk.org/book_1ed/)

Raft is conceptually deep, but code wise isn't actually that hard to do.
However, it gives you a beautiful introduction to consensus algorithms which
appear in many distributed systems.

------
elecengin
A word of caution - projects in topics like AI and big data sometimes end up
being much larger than you thought at first. I would suggest that you find
something achievable within the time you have. Besides teaching technical
skills, capstone projects teach project management skills. I think you will
find that future employers will be much more impressed with a well executed
project than a technically impressive project that never got off the runway.

That doesn't mean you cant explore these topics... just find something that
you are passionate about, and aggressively scope it down for the first pass.
If you succeed, you can always make it larger!

~~~
knowbody
thanks, definitely good piece of advice. I know AI projects might be too big,
but as you said maybe I could do something small, well executed what later on
could be improved.

------
sam_bwut
Have you tried talking directly to researches with similar interests to you
about potential ideas? They'll often have stuff in the back of their minds
that they wouldn't want to put out as a general proposal to undergrads...

~~~
knowbody
this is something I need to do. before that I want to have some of the ideas
lined up in my head

~~~
wxm
Go to the website of departments, research groups, and professors at your
university and get a broad understanding of what they are up to. Maybe read
(the abstract of or the entirety) of one of their recent papers or check out
their public outreach work/press releases. This will help you build an
understanding of who's doing what at your university, their current
progress/steps, etc. Contact and talk to those professors/research groups that
are doing work that you are interested in -- they might have some ideas for
undergrad projects.

------
mcarrano
Be sure to check with your CS department that you can work on your own idea.

I know at my university, if I wanted to work on my own project, I had to
submit a proposal several months in advance. In addition to that, I needed to
have an outside stakeholder who wanted to "sponsor" the project.

1\. The idea needs to be technically challenging.

2\. The idea must be small enough in size to complete in the allotted time
frame.

3\. An outside stakeholder must "sponsor" the project to mimic the real world
of working with others such as a project manager.

~~~
slindstr
Also be sure to find out who will actually own your project once it's done!
It'd be a shame to build something you'd like to continue working on after
graduation only to have it be owned by your school instead of you.

~~~
hauget
+1

------
Softly
The choice of supervisor is pretty important, I was lucky and found one who
held weekly meetings with all her students and who kept us all on track. She
even pushed me to publish an academic paper (and a free trip to Italy to
present it).

Mine was computer vision based, so you're welcome to take a look:
[https://github.com/SoftlySplinter/kyffin-digital-
analysis](https://github.com/SoftlySplinter/kyffin-digital-analysis)

~~~
knowbody
that looks cool. good job!

------
arh68
Less big data, more ML: you could build a rudimentary shazam, for either audio
or images. Use small samples (~1sec clips, or 10~20% image crops) to match
against an existing corpus. Bonus if the audio is distorted &/ the image is
skewed/rotated a slight amount.

Not as fun: write a k-lambda [1] interpreter in x64 or ARM. More fun: write it
in Python or Go. Not fun at all: write it in Verilog/VHDL.

Big data: I hope you like football! Just kidding, there are other datasets,
too. You could simply create a responsive website for exploring the dataset.
Or do some interesting analysis. Up to you. [2], [3]

[1] [http://www.shenlanguage.org/learn-
shen/shendoc.htm#The%20Pri...](http://www.shenlanguage.org/learn-
shen/shendoc.htm#The%20Primitive%20Functions%20of%20K%20Lambda)

[2] [large!]
[http://aragorn.org/data/sports/NFL/seasons/metadata_since_19...](http://aragorn.org/data/sports/NFL/seasons/metadata_since_1980/uncleaned_nfl_game_metadata_since_1980.csv)

[3] [http://www.wired.com/2012/09/nfl-
momentum/](http://www.wired.com/2012/09/nfl-momentum/)

~~~
knowbody
cool stuff, thanks!

------
hauget
1\. Think about how much time & budget you have first. You want to make sure
you can finish your project and can get it done with the resources you have.

2.1 If you're interested in "big data/analytics", why not look into Cloudera &
Datameer, and talk to some people at the World Bank & the Inter-American
Development Bank to see what problems you could solve for them?

2.2 Regarding AI, email/tweet some of the people at Deepmind & Vicarious (you
can google for employee names) to see what they can suggest.

2.3 Regarding computer vision, try emailing Blaise Aguera or Johnny Lee to see
what they consider "interesting" (or just google some of their work).

3\. Finally, AND THIS IS THE MOST IMPORTANT STEP: think about why you're doing
this. Do you just want to get it over with so you can move onto something
else? If so, pick a project that's relatively simple but difficult (running a
marathon is simple but difficult). Otherwise, if you want something
meaningful, choose something that will be fun. Choose a question that YOU want
answered and that peaks your interest. Curiousity+fun will make the work feel
like no work at all. GOOD LUCK!

~~~
knowbody
thank you for the great advice!

------
jiggy2011
Look at the research that the faculty of your CS department is involved with,
find something there that interests you and approach whoever is heading up
that research and ask them to be your supervisor. See if there is some piece
that you can contribute without having to understand the totality of the
research.

------
buremba
I'm working on an open-source analytics project, since you're interested in
big data you might want to take a look at it.
[https://github.com/buremba/rakam](https://github.com/buremba/rakam)

------
ripitrust
Talk to your supervisor about your idea, draft a basic plan of the project
timeline and the technology/knowledge that are required, See if you really can
do it.

A big pitfall of FYP is that aiming too high but actually struggled along the
way

------
segmondy
The problem with AI, if you don't have visual/immediately verifiable results,
you fail. You could make great progress and have a partial solution needing
polishing, and it won't be good enough if your professor is not a smart man.

A website or some graphics tool kit, well, it might not be done, but the
partial solution could be seen and you get good grades. I say go for the easy
stuff, take your good grades and graduate. I believe that If you were really
serious and had the chops you would have had a bunch of problems that interest
you and you won't be asking us.

------
patrickdavey
My only advice is slightly tangential to the question:

Do not lose track of how much your project contributes to your final grade (if
you care about grades). It is so so easy to spend 99% of your time doing the
fun project which counts towards 20% of your degree, leaving 1% of your time
to study for the remaining 80%...

That said, having a decent project to show is at least if not more useful in
getting a job out the other side (if that's what you want).

Good luck, would be interested to see what you end up picking.

------
imjustabill
Look for a local charity or nonprofit that might need some work done. Having
real stakeholders, requirements, etc, is a great way to simulate what a real
project will be like.

------
JSeymourATL
BIG IDEA: What we are not seeing yet is all this data being converted into
something meaningful that front line customer service analysts can use when
managing customers.

\- See more at: [http://www.information-age.com/technology/information-
manage...](http://www.information-age.com/technology/information-
management/123458489/why-moving-information-missing-link-big-data-
chain#sthash.UjdqsnEc.dpuf)

------
stevoo
Hi, this is exactly what i was facing. The projects provides were boring.
Nothing exciting so i picked my own project.

I build a chess playing lego robot. What do take in mind is that you dont
overeach. You have a set amount of time. Make sure the project you pick is
achievable. I over aimed and took me a bit longer to finish.

But building a complete solution for a website is not an easy task. It takes a
lot of planning and knowledge to complete it.

------
Mnkras
One thing that I am most likely to do is to re-build or replace older and less
functional pieces of software used by the educational institution.

It's win win, there is almost always some form of old software that needs
updating, new features, or just needs to be completely new, and many
educational institutions will jump at "free" work.

------
middleclick
Start with an open source project that you love and can work on (technically).
Talk to the developers, read the project website and work on a feature that
will constitute the duration of the final year project. That way, you will be
contributing to something that will help others and also get your project
done!

------
bsmartt
For my senior project, I was able to find a company with work in the open
source space, and got a job out of it from making notable contributions to
their OSS offerings. Github issues and explore are good places to start. Try
and get in touch with the project leaders.

------
knackernews
You need to focus on why you're doing this - It's for your degree.

And since it's only your BSc just do the easiest project that's not boring and
get it out of the way.

Build the cool stuff later. A few years from now no one will care about your
GPA, let alone your final year project.

~~~
incision
_> It's for your degree._

I'd wager that this - the notion that school is for a degree, abstract from
challenging oneself to learn anything is a healthy contributor the apparent
glut of 'uderemployed' graduates.

 _> A few years from now no one will care about your GPA, let alone your final
year project._

Perhaps, but they'll certainly have more to gain from someone who cares about
doing quality work and is willing to challenge themselves.

Further, it's not an entirely safe assumption that you'll even be capable
doing 'the cool stuff later', particularly without having tried.

------
hmottestad
Well, one thing I always wanted to do was controlling house lighting by doing
face recognition.

~~~
knowbody
sounds cool! tell me more about it...

~~~
hmottestad
The idea is to be able to count how many people are currently in the room, so
that you can keep the light on. If you get bored you can also add on a simple
AI to predict the number of people in the room based on hour of day and day of
week.

Currently I control plenty of lights at home that are LED by using a big
transistor and an arduino connected to a server running a java server program.

I would recommend doing something simple like gluing a servo to a switch to
begin with.

For facial recognition, go with something off the shelf to get things up and
running. And if you want to expand the scope, try to write your own simple
engine instead. [https://www.openshift.com/blogs/day-12-opencv-face-
detection...](https://www.openshift.com/blogs/day-12-opencv-face-detection-
for-java-developers)

------
craig0990
I remember feeling the same thing - I could just "build a website" but I
wanted to prove that I had actually learned something over the last three
years.

So what did I do? I re-implemented Git in PHP (read-only). It was, to put it
mildly, difficult, and stressful, but I actually managed to pull it off
(mostly).

I didn't just choose at random, obviously. I wanted to add file version
support to an open-source project, and after some basic research, settled on
Git. The catch was that the open-source project ran in a pure-PHP environment
(no modules beyond those commonly found on shared hosting). So I had to find a
way of reading Git repositories in PHP without resorting to exec() etc. Hence,
read-only Git in pure PHP. Throw in WebDAV or SSH and you can actually push /
pull to those repositories with front-end clients like SparkleShare, which was
a good candidate for future work.

I nearly went crazy, of course. I had little-to-no understanding of DVCS
concepts, graphs, and so on (big O analysis is still difficult to be honest).
However, by writing the project, I got much more direct experience of graph
theory than I ever would studying a text book. This has turned out to be
incredibly useful in my day-job as a developer.

The take-away I'm trying to get to is: pick something completely (or slightly)
unrelated to computer science concepts like big data, AI, etc. and find
something you're interested in. Then ask the question "How do I apply X to
this?".

(These examples are purely off the top of my head, and may actually be
ridiculous in practice. YMMV)

"How can I use big data techniques to analyse my web server's access logs?"
"How can I use AI/Machine Learning to detect shellshock attacks on my server?"
"How can I use computer vision techniques to render a map of the local area
using drones?" "How can I use big data, AI, machine learning, and computer
vision techniques to analyse the proportion of cat pictures and videos posted
to social media?"

What I want to re-iterate though is that I started with "I want to add file
versioning support to this software" and ended up discussing graph theory,
diffs, patches, open-source etiquette posts by ESR, big-endian and little-
endian integers (Git uses both in it's file formats), binary fanout tables,
the SHA-1 algorithm, content-addressable filesystems, and all sorts of other
crazy stuff I hadn't even anticipated when I started.

My supervisor liked it - I wanted to sleep for a month straight.

------
ckvamme
Build a drone using ArduPilot - on top of 3DRobotics hardware. Write an AI
that combines input from Twitter sentiment analysis and OpenCV to autonomously
fly around the world looking for sad tweeters - drop a burrito on them.

Check, check, and check.

------
rizaherzego
Waw, me too have the same problem. I am interested to make final year project
about education and technology (not really interested to pure "computer
science" field like design algorithm, etc.), anyone has a good idea?

------
ThomPete
Build a voting system based on the crypto protocol.

------
wallarelvo
Build a sports analysis application

~~~
knowbody
what the app would be doing?

------
mobman
contribute to my PHP Vulnerability analyzer. make it better.

mobman.bitbucket.org

~~~
alasdair_
I wrote a PHP vulnerability scanner once. It was pretty simple:

if (isPHP)

    
    
      echo "VULNERABLE!"

