I’m currently working on a project in C where I have a choice between using a library for hash tables or simply creating my own hash table from scratch.
What would look better on a Github portfolio from an employability perspective?
It’s better that you don’t use resume driven decisions. Just do whatever you are interested in.
Bad advice in this thread. As someone who spent half a decade building what (was) a quite impressive GitHub (github.com/dginovker), no interviewer or recruiter ever looked at it. This was after ~600 applications.
I also volunteered to be part of resume screening at two major companies. Not a single person in either company looked at GitHub repos.
To answer your initial question, use a library. Make cool things, learn good tech that is useful in the real world. You will never have a job where you have to reimplement a hashmap.
Almost my entire career I’ve worked in open source, so it’s very easy to see what my technical work looks like. No one has ever looked at it.
When I have been on the other side, I have looked at the GitHub “portfolio” of junior applicants, but TBH, it didn’t bring me much. There will always be lots of opportunities for improvements in those examples, but that’s the point - I expect them to improve on the job.
More experienced developers will almost never have significant work on GitHub, and if they do, it’s not a “portfolio”, but just their past work.
Hmm, they’ve looked at mine. But it’s not intended to be impressive, and I’ve switched to self hosting my version control anyways
I’ve had to review resumes when we were trying to find someone else to bring on the team. My boss dumped hundreds of resumes on me and asked if any of them looked promising – that’s after going through whatever HR bullshit filters were in place – on top of all the other work I was already behind on since we didn’t have enough staff. That is the state of mind you should expect someone to be in while looking at your project.
If anyone looks at your repo, they’re going to check briefly to see if you have any clue at all what you’re doing and whether your code likes like it’s written by the kind of person they can stand working with. Don’t make any major blunders that someone would notice with a quick glance at the repository. Be prepared to talk about your project in detail and be able to explain why you made the choices you did – you might not get asked, but if you are you should be able to justify your choices. If it gets to the point of an interview and your project looks like something that could’ve been done easily in 100 lines of Python you’d better believe I’m going to ask why the hell you wrote it in C in 2025… and I say that as someone who has written a significant amount of C professionally.
If you say you have multiple years of professional programming experience and send me a link to a repo that has
.DS_Store
in it… your resume is going straight into the trash.If you’re trying to demonstrate real world programming skills then selecting and using an appropriate library is the best move (unless this is an unlikely case where there is some really compelling reason why a custom implementation would be preferable).
But if you want to make your own hash table for funsies or for educational purposes or whatever, you could add a note or comment stating that, if you’re concerned that prospective employers might get the impression that you will write everything from scratch even when it’s a bad idea.
Use a library if it fits your use case. Build your own if you enjoy it, or require some specialty features
Personally (as a dev), I wouldn’t particularly care that you know a specific library (the chance of us using the exact same library is pretty slim and will probably change when the project changes). But I would care to see that you are using a library when it makes sense.
So, if you implemented a hashtable yourself and I spotted that, I’d remember that as you either not knowing that that’s called a “hashtable”, so you didn’t find a library for it. Or I might think that you’re potentially stuck-up, thinking you can do a better job implementing it yourself.
The aspects I’d look for, starting with the most important:
- Does it seem like you have fun when programming?
I don’t need you to be writing humorous commit messages, but if it looks like you just specifically coded some portfolio applications three years ago and then never touched them again, that wouldn’t leave a good impression on me. - Do your projects fulfill an actual need and look like they’ve seen real-world use?
Writing out some example applications is a whole different shtick than actually making it work in the real-world. - Do you have unit tests? Is your commit log clean? Is your project reasonably documented?
I can teach technologies and architecture, but it’s much harder to teach a drive for good code quality.
- Does it seem like you have fun when programming?
How do you intend to present your GitHub portfolio to your potential employers? Nobody’s going to do a full, in-depth, or even basic analysis of your repos unless maybe with automated tools or what GitHub itself provides.
Your CV and interview are much more important. Solutions [and projects] matter much more than details. Experience and that you can talk about your work or experience is much more important than technical details.
A hash table library doesn’t sound like particularly noteworthy expertise. Adding a dependency and calling simple documented methods on it in a simple, standard behavior manner isn’t noteworthy.
If you’re implementing your own, I wonder if “simply” implies a non-noteworthy implementation, or in-depth exploration of hashing and storage indexing. The latter would be a different project though, putting your other on hold.
I don’t see it making a difference for employers what you pick here specifically.
If you’re interested in implementing one or learning about the technicalities of it go ahead. Otherwise use a library and continue with your project or other interests.
Disclaimer: I’m not in the recruiting space nor do I have that much or recent experience being interviewed/the broader companies hiring processes.
Ermph, this is C specific and shouldn’t be extrapolated to other languages. Since you’re writing in C you are trying to show your chops as a low level programmer. Therefore, showing that you know how to implement a hash table is worthwhile, so you should do it yourself. You could add a comment to the code saying something to that effect. Again that’s just for C. Implementing your own hash table in Python instead of using the built-in one would be crazy. Implementing one in C++ instead of using the stdlib or some other one would have to be carefully justified.
I do have to wonder what you are up to in this day and age, pursuing what sounds like junior level C projects. I would say that whole approach is something of a dead end. You’re more employable with higher level languages than with C these days, I would have to say. Or if you write something in Python that incorporates some C functions that you write using Python’s C API, that shows you can operate at multiple levels at the same time, which is even better.
Ah the project was just an excuse to familiarise myself with low-level network code. It’s basically just a simple TUI app that takes a list from a popular comics podcast website and allows the user to locally track the comics they’ve read then update the list when the a new podcast comes out adding additional comics to the list.
I could have done the project in a quarter of the time in Python. But I wanted to get a strong foundation in low-level socket programming, network protocols, TLS and HTML parsing. I suppose on some level I’m just interested in those things.
That said, you probably have a point. Maybe I should just look into Rust and Go. I’ve had some fun with the latter.