Hacker Newsnew | past | comments | ask | show | jobs | submitlogin
Ask HN: Final year project in CS
38 points by knowbody on Sept 28, 2014 | hide | past | favorite | 60 comments
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?



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.


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.


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


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


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.


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


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.


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.


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.


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.


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.


+1


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


that looks cool. good job!


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/


cool stuff, thanks!


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!


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.


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


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


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.


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.


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.


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


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.


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.


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.


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.


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


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.


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


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


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.


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.


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?


Build a voting system based on the crypto protocol.


Build a sports analysis application


what the app would be doing?


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




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: