Ask HN: Final year project in CS

38 points by knowbody ↗ HN
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!

I would love to do something outstanding, something what I could show of with to my future employers.

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.

Any advice?

61 comments

[ 3.0 ms ] story [ 115 ms ] thread
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.
How about steganography?
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!

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.
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...
this is something I need to do. before that I want to have some of the ideas lined up in my head
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.
Do your professors list any projects of their own on their personal pages? Ours do and if you look at one in a domain you're interested in you'll probably find something much more interesting to you than the generic course level suggestions.
contribute to my PHP Vulnerability analyzer. make it better.

mobman.bitbucket.org

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

if (isPHP)

  echo "VULNERABLE!"
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!

I do "things" outside uni. I could choose something easy, finish in a month or two, but that's not what I look for
If you're doing it to show a future employer, then a full-featured modern website with cleanly written code is a great work example. (Though a deep-pocketed institution might consider paying someone to do this type of work.)

UNLESS you have a specific domain you want to work in. Or you have a company you want to get a job at and they work in a particular niche.

I also agree with zorrb, as I used to be plagued with wanting to go above and beyond with every academic project. The problem is you have limited time, and you can find a better use for it working on something that is more flexible.

It also helps to begin with a strong interest in a specific field, and extra knowledge to back it up, so you don't waste a lot of time doing introductory research to get up to speed.

If you're here, then you're likely more entrepreneurial. Do the easy project, and spend your extra time working on a start-up idea or connecting with classmates to find a co-founder for something bigger.

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.

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.

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
Build a sports analysis application
what the app would be doing?
Well, one thing I always wanted to do was controlling house lighting by doing face recognition.
sounds cool! tell me more about it...
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...

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!
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.
Consider doing some language processing using the excellent NLTK library: 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. The research paper is here: https://ramcloud.stanford.edu/wiki/download/attachments/1137...

looks ambitious, I'll have a look at it in a bit
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/

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.

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.
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.
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.

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.
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.

I actually disagree. If you feel compelled to do something cool, do it. This is a great opportunity to challenge yourself. And someone will care about the project you do -- you will. Never do anything but your best.

But to the other posters merit, if you can't narrow down what it is you want to do, then pick a "boring" thing -- it's better than nothing at all.

>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.

"Build the cool stuff later." Later becomes until I have dont need to pay the bills. Then it becomes until my kids get older. Then it becomes until I'm retired. Then it becomes until I'm out of my deathbed.
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.
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

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.

My question is how it can become my final year project? I know I can do it in the meantime.
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...

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...

[2] [large!] http://aragorn.org/data/sports/NFL/seasons/metadata_since_19...

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

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!

thank you for the great advice!
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.

Indeed, uni. website have valuable real world constraints to learn about. Not exciting at first but worth doing.
I think I see the point you are making here and I partly agree with your comment.
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

That's true, but let's be honest. He'll likely have thousands of opportunities to build a CRUD website after he graduates. You rarely have the time/freedom you do when you're in school. take advantage, and do something that's more interesting/risky/disruptive.
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

Build a voting system based on the crypto protocol.
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?