I just graduated with a software-engineering master’s degree with a good grade from a top-five university in the UK. I also have a bachelor's in computer science.

I always revised just for exams and just enough to get that first-class degree, without actually learning anything. I basically revise for the exam itself, by looking at past paper answers, and I never study the actual material. I then forget everything after finishing the exam. I've been repeating this cycle since school. This method has given me a great first-class degree but with practically zero knowledge. As @Sule said, I never internalised the material. I also never did a single internship because I didn’t need to.

Now, I’m facing a problem: How am I supposed to find work if I barely know how to program? Will employers just accept me because I have a fancy software-engineering master’s degree from a top-five university? I also haven’t worked professionally a single day in my life.

I'm thinking of getting a PhD at this point.

  • 54
    Any reason that this isn't just Imposter Syndrome? Do you have objective evidence that you didn't learn anything?
    – Buffy
    Jun 25 '19 at 18:09
  • 6
    I'm voting to close this question because I think it belongs on The Workplace rather than here. Jun 26 '19 at 11:34
  • 1
    Answers in comments and general debate about programming vs. software engineering vs. studying computer science have been moved to chat. Please do not post answers as comments and read this FAQ before posting another comment.
    – Wrzlprmft
    Jun 26 '19 at 14:42
  • 1
    @FedericoPoloni The Workplace has a question about the situation from the perspective of a manager.
    – WBT
    Jun 27 '19 at 15:09
  • 2
    There does not appear to be an actual question here. Most of the post is complaining; the question "how I am I supposed to..." is rhetorical, and "will employers accept me?" asks strangers on the internet to make predictions about the future concerning people they don't know; that's not possible to answer. Do you have a question that actually has an answer, or are you just complaining? Jun 27 '19 at 16:56

18 Answers 18


You asked,


It sounds like you're looking for a job in industry, versus academia, so I will answer from that perspective.

Employers are generally looking for people who can get things done and will consider the ability to program as a means to an end. While technical skills (i.e. mastery of a specific programming language) will be important, it's never the only factor evaluated, and it's sometimes not even the most important factor. Combine that with the pace at which technology develops, and having a specific technical skill ends up becoming even less important, as that skill may be obsolete rather quickly. Go find a dozen software engineers who have been working in industry for a decade or more since getting a degree, and ask if they're still using the actual content from any of their classes. You may be surprised at the answers. What they will probably talk about is how valuable it was to become a "learning machine" rather than a knowledge repository.

You've described the process you used to get good marks on tests. That's a valuable skill. Employers don't inherently care about test scores, but they will care about someone who can pick something up, and learn it well enough to complete a task. In many programming environments, the ability to learn something, apply it, and then move on to the next thing is incredibly valuable - even if you "forget" that thing as you're picking up future things.

Further, Resumes and interviews are sales tools - you're selling yourself to an employer. Focus on the value you can add and match that value to their needs. There's a job out there for everyone - don't just spam every software job you see and hope one sticks despite your shortcomings - instead, focus on understanding your own strengths and then look for jobs where your strengths are a good fit. Write your resume to emphasize the skills you do have and be ready to talk about them in interviews.

Taking a bit of a tangent, there's a concept in motorcycling called "target fixation." Riding instructors working with new riders will emphasize the skill of looking where you want to go when in a difficult situation. This is because new riders who are surprised by a piece of road debris, or a vehicle out of place, tend to focus on that thing to the extent that the ride right into it instead of avoiding it. Apply that to yourself since you're undertaking the new pursuit of searching for a job: Don't become fixated on what you perceive as weaknesses or you may end up in a mindset where all you have to offer in an interview is nervousness about what you see as your own shortcomings.

As a final point, to address your comment of,

I also haven't worked professionally a single day in my life

I have a feeling that the quicker you can change that, the less significant your problem will seem. Once you have a few years of work experience, you will see life through a different lens - on the one hand, you probably don't want a menial job for the rest of your life, but on the other hand, your first job doesn't have to be the job - it's OK to just take a job and get some experience to give you some confidence and expose yourself to a professional workplace.

  • 8
    Quite. I used BCPL, Algol 68C, and FORTRAN at university. I have been paid to write programs since 1980, and the only one I used at work was FORTRAN - and I haven't used that since 1995. Jun 26 '19 at 9:45
  • 1
    @MartinBonner Fortran here. I feel your pain.
    – RedSonja
    Jun 26 '19 at 12:22
  • 6
    The motorcycle analogy is apt. So many videos of a car pulling in front of a motorcycle where the vehicles each turn in the same direction and meet in the front corners... stop fixating and turn against the direction of the obstacle and you'll miss the collision. Don't fixate on what you didn't learn, but instead on what you did. The OP says he 'didn't learn a thing'... that is patently false. It doesn't matter whether the degree was in England or China... getting a Masters meant there was studying and learning and attending some classes... something was learned.
    – CGCampbell
    Jun 26 '19 at 13:39
  • This post talks about "valuable skills" specifically for programming roles, with recommendations on how these can be sold to an employer, and not getting hung up on weaknesses like lack of technical skills, concluding with a recommendation to get professional experience starting ASAP. Your comments on a related question focus on finding a (n implied: non-programming) job that is a good fit to one's strengths. I cross-link with this comment to let any reader who wants to read and figure out if there's a contrast between this & that or not.
    – WBT
    Jun 26 '19 at 19:36
  • 1
    Target fixation isn't just with motorbikes - You'll find that if you watch any episode of Canadas worst driver they will repeat "look where you want to go" - not "where you are going". It's actually a really good life philosophy
    – UKMonkey
    Jun 27 '19 at 12:30

Stop complaining and fix your problems.

Doing a PhD is not a solution. You say you internalized nothing during your Masters. What makes you think you'll internalize something during your PhD? If you don't, what makes you think the PhD will help you? You'll just end up kicking the can down the road, and five years from now, you'll have "Will employers just accept me because I have a fancy software-engineering PhD degree from a top-five university? I also haven't worked professionally a single day in my life."

Things to do now:

  1. Realize that you don't have to internalize stuff. "Intelligence is not the ability to store information, but to know where to find it." -- Einstein
  2. Learn all these things that you wish you had learned but didn't. If you barely know how to program, then learn how to program. Go practice. There are plenty of tutorials out there you can find using Google or your local library for you to self-teach.
  3. Find a job. Visit your university's career center, if they have one. If not then you'll have to fix your CV yourself, find the job adverts yourself, and apply. You can still do it, it'll just be harder.

Points #2 and #3 aren't easy things to do, and they're not going to get easier. You can sit around moping about how you haven't learned anything, or you can do something about it. Your choice.

  • 10
    "If it's attributed to me, I probably didn't say it." -- Einstein
    – user48772
    Jun 27 '19 at 15:01

In 2008 I started a PhD, although in pure mathematics rather than computer science. I had had a school and undergraduate career much like you describe, and like you I had ended up with a 1st-class degree. I was always extremely good at passing exams, and my habit was to learn to the exam. I never retained very much information after each exam season was over, and because I was so skilled at passing exams I had never had to work particularly hard at any point in my academic career.

Part of the reason why I started a PhD was that I did not know what else I should pursue. My PhD was a disaster; I could not cope with the entirely different expectations of me since academia was no longer about passing exams (something I could always do without much effort) but about actually studying hard, something I had rarely if ever needed to do before. I responded poorly to this situation, retreating from the challenge and failing to adapt to the new situation. Several years later, I eventually left my course without having gained any additional qualification.

In summary, you should consider carefully whether you will successfully make the transition from undergraduate to postgraduate study; they are radically different and the approach you have described is not one that will get you anywhere. I know this from experience. In any case, I do not think you should start a PhD simply because you are not confident in applying yourself to some other path.

You probably have picked up more than you realise that makes you attractive to an employer looking for programmers, or graduates in the sciences more generally. An employer looking for new software developers, in particular, is not going to expect you to know much about how software development is actually practiced in the real world - even if you have the fanciest degree your undergraduate institution gives out. They expect that you will take some time to learn how to do things the way they want them done. You should avoid assuming that you do not have anything to offer an employer just because you feel you did not retain much specific knowledge.

  • If you have suggestions for how someone like OP should best be treated by the employer, they are welcome here.
    – WBT
    Jun 26 '19 at 18:52

Employers (mostly correctly) infer that if you can figure out how to pass tests at a high level, especially when specifically about something relevant like computer science, then you can figure out how to build a form (or handle the input, or query a database, etc.). You say you don't know anything, but I bet that you could implement binary search a whole heck of a lot faster than someone who's never programmed at all before. Of course, in your first job you probably won't have to - and you might not in any job after that, either. But you could figure it out, which is about the same thing as figuring out whatever it is you'll actually be asked to do in your job.

In fact, it's been so long now since you didn't know any programming at all that you literally cannot recall what it was like to not know any. So as far as you are able to think, you must not know anything - because you have no one who actually doesn't know any programming to compare to, because most people know truly zero programming and don't try to, so you are unlikely to have experience with anyone who actually knows nothing attempting to do it. The only comparison you can make is upwards, to people you assume must know more than you. This leads to a warped worldview, and often manifests as imposter syndrome.

In short - it is a normal human response to the weird and rarefied world you live in. You'll live.

As to what will happen in the first job, anyone with experience working with people fresh out of college (regardless of degree level) expects that in the first 3-12 months you will do little that turns out to be actually useful or valuable. With companies that know how things work, you'll be put on an existing project that has some minor changes to be made, or they'll put you on a special project that really only exists to get new employees up to speed on the local system. Any company that hires you with the demand that you "hit the ground running" is more than a bit silly, but they usually appreciate you pretend to be making progress and dirty hacks are the best they can hope for, and they'll pay you for it nonetheless. If you don't think back in horror at the code you use to get paid to write, you aren't paying attention.

What companies who hire people like you know is that you are at least of above average intelligence, you are used to figuring things out on short notice, and you have lots of experiencing turning out things that sort of seem to work even when you don't understand what is going on. You have years of experiencing doing what you are told even when you don't agree with it or see the point, to please weird and often inscrutable authority figures. You should at least be able to pretend you know what variables and methods are, you've heard of object orientation, you likely get the general concept of what a database is for, etc. - your degree should provide most of the fundamentals, whether you remember them very clearly or not. You'll be expected to cram to prepare for tech interviews (and later on, project presentations), anyway, which you obviously learned how to do too!

Honestly, this describes almost the perfect employee, which is why so many software companies are keen to hire from top universities - they know what they are getting! Sure, ideally employees would actually know what their job entails in full and be good at it already, but many hiring companies don't even know exactly what the job will entail month to month themselves - so how are they going to hire for that? Besides, people with all the skills already developed cost too much to hire and retain - you are not really competing with those people directly right now.

No, this is not the story these big-name universities tell, thus your feeling that your situations is unusual - but absolutely every manager working in IT/software I've ever talked with knows those marketing lines are baloney.

At the same time, that means some companies won't be very interested in someone with an advanced degree and no job experience. That's fine too - you don't need all the jobs, just one at a time. Apply to the sorts of places that hire people like yourself, who are in the position you are in now.

Having no professional experience, even in an internship, means an extra tick of challenge, but it is hard for everyone. Expect to have to spend considerable effort developing and being able to talk usefully about your past experiences. Preparing for interviews means recalling and retelling stories about class projects and assignments in ways that showcase what you learned, which you understandably don't recall easily - you'll have to work at it, and that's a big part of what "preparing for interviews" is.

Getting the first "related experience" job entry is one of the hardest transition periods. It's always this way. Using a PhD as a way to kick the can down the road will not automatically solve the problem, and you'll just have similar challenges to overcome then too.

You may need to take advantage of flexibility to travel and being willing to do work other people would pass over as 'boring'. Insurance and education companies, for example, often have to work hard to recruit people because everyone graduates and wants to apply to the most famous name-brand tech companies and don't even think about applying to them. Some pay less, some pay more, some companies are more pleasant than others, etc.

You'll get the first job because you get it, and that's about it. You put yourself in what turns out to be the right place at the right time, it won't be perfect, and you are unlikely to be especially good at it at first. But it's a start, and "getting good" is something you will have to work at for years - no one is good just because they went to college. With time in a related job where you have a good attitude, develop your skills and experience, and build up a network of people in a similar line of work, the next job can be a lot easier to find.

  • 3
    The bottom line of this is, I wouldn't retain expectations of a crazy paying job from the get go because of the degree; however it should act as a multiplier down the road as experience comes in. Just make sure you apply somewhere you can get actual valuable experience, and work with mentors to leverage that.
    – lucasgcb
    Jun 26 '19 at 8:39

Programming is not difficult, mate. Being a software engineer is.

That's why any random idiot these days can become a programmer and for as much as they'd like to go around calling themselves "software engineers" or "devs", we all know they're just code monkeys that the smarter guys use to do their bidding.

So, spend some time learning 1 programming language. Java, C#, Python. Something widely used. It doesn't take long. Build some projects.

Even if you don't have the experience, being able to point to a personal project and say "I did this" goes a long way.


Since many answers are addressing industry, I want to add a counter-point here: I wouldn't be so confident in leveraging your credentials to get an industry job, at least not a particularly good one. Nowadays employers test applicants much more rigorously in software interviews versus the recent past. Probably due to the very weak or fraudulent credentials coming from some parts of the world, plus the usual problem of the bald-faced lies about skills people put on their resumes (perhaps heightened by the huge salaries offered nowadays for the right specialized skillset), and what seems like rampant cheating in schools everywhere. I'd suggest try and learn as much as you can of the key things you are supposed to know. A good way to get started is actually do a couple interviews, which will give you an idea what you need to review.

As for grad school, it is first about potential, not skills. They will want to see that you can handle the difficult concepts as you dig deeply into a topic. This is probably best demonstrated by standardized test scores, considered alongside grades. But current fashion is to not require the GRE at many places, in which case they will dig deeper into grades in particular courses. Another very important factor in technical fields is work experience, perhaps ironically. Particularly if it involves doing some R&D that is relevant to your phd program. In part it helps convince them you will not quit to go to industry, plus it suggests you already have strong skills to make for a valuable research assistant.



I entered the UK workplace a few years ago with a Maths degree having never coded before and having never had a job outside of voluntary work in a charity shop. So you having a degree in a related field means that you can't have less practical knowledge than I did, and you probably have more than you think you do. Regardless, it's not the barrier you think it is. Starting on a graduate scheme or as a Junior Software Engineer should mean that the company is willing to put some resources towards you in terms of mentoring, so your programming knowledge and your best practices knowledge will quickly pick up in that period. (A slightly idealised summary, but whether by code review rather than by outright training, you'll have input from senior members of staff).

You're free to be honest that you're not coming in with incredible programming skills, but don't sell yourself short either. Many employers won't care about the university you got your degree from (I graduated from a top-5 uni in my field with a 1st, another guy in my intake had a 2:2 from a former poly), rather your willingness to get stuck in and learn and contribute is what will sway them.

On a lighter note, you know how to use StackExchange, so you know how to solve most rudimentary problems that will come up in your future employment!

  • If there were particular mentoring strategies that worked well for you, to make this "not the barrier you think it is," you are invited to describe them here.
    – WBT
    Jun 26 '19 at 18:55

I’m guessing you still have the learning materials from your previous degree or have access to them. I would start by pulling them all out and going through them by yourself. If you’re smart enough to stumble your way into a first class degree then you should be able to teach yourself the material and then practice programming, and if you’re still facing some difficulty, you should then probably ask for help. You must have had friends on your program who did well and actually internalised the material. Just ask one of them... and remember, you have no room for shame; swallow your pride and ask for help... Short of doing the degree again, I don’t see any other way out of this.

To be honest, a lot of people have to pull out notes from previous studies when applying for certain jobs to refresh/reteach themselves things they may have forgotten. Since you’re in a more intense situation, maybe take six months to a year out, if you can afford it, and teach yourself.

A PhD, I think, should be out of the question at this stage. It’s way more rigorous than your past degrees have been and seems like jumping out of the frying pan and into the inferno.


Here's the thing about work: you don't do it under exam conditions. You know you can pick things up fast - you have a first class degree from a top 5 university by virtue of doing that. That is a skill you can use, once you have got through an interview.

I've got about 10 years of working in industry, and a good reputation. I am also not great at internalising syntax, and often feel like I'm starting again after a few months away from a language.

What I have though is a set of crib sheets and reference books for languages I commonly use. My employer is fine with that - they care that I do the work right, not whether or not there is a crib sheet pinned to the divider next to my monitor.

If you can work out how to solve a problem in a given language in reasonable time, it does not matter how well you have internalised the language. In fact, being able to pick up obscure languages fast and apply them can be a valuable skill.


But do you want to work that?

I don't really find any of your stuff you said to be a problem. Go and apply to be an intern somewhere, they do not require knowledge. Since you have the "talent" to learn fast and understand things, in no time you will get to the point where you can have the job you want. As the other people said - there are so many tutorials online that you can learn from if you want, this + being an intern somewhere will help you fix all your 'problems' since you will learn so much. You are not the only one tho, I know a lot of people who get A on all subjects in computer science, but they do not know how to code, and they work in a supermarket. The choice is yours, no degree will ever teach you to be a good programmer, practice and understanding of the code and when to find something that you need will.


Only few people are prepared to "work" right after finishing school (and I don't mean that you're not a good professional, just that you have no experience yet). Always be honest in your interviews and don't worry about that too much, all of us already had this problem, we all faced the same situation. When someone like you is hired, your working colleagues should expect that you need some time to adapt and learn how to work. The good thing is, everything is in your mind, although you don't think so. As soon as you need them, they will pop out from your memory and things will get better. Also, you should have a fresh mindset, which gives you an advantage because you will see things that people who have been working for a long time can't see immediately.

Don't get afraid, that's normal. Believe in yourself and good luck :)


Education isn't everything. You have to apply it, and decide for yourself if you need to study more, or continue working and learning on the job.

Can you believe that I wouldn't have known what a WEB API was if I just followed my courses, finished university, and finished grad school? I learned most of my CS topics while working

I think I can help with this because I am currently in your shoes ... or was.

I am currently getting my BSc while studying Computer Science at a top university.

However, I do not plan to get my masters, or even if I do, I do not plan t o have any hopes from "achieving" anything out of it

Here is why:

A master is obtained after your BSc, which should've taught you how to code. When you say you don't know how to code, that sounds really strange to me because coding is the first thikg we did in University. Sure we learn some useless theory here and there, but we definitely learn coding, ddesign patterns, testing, etc.

So when you say you don't know how to code, I think you are lying to yourself.

Secondly, when I went to intern at a place, my manager himself said that Master in CS is useless. It just shows that you are willing to learn more, and were able to do it, but rarely will have an impact on your role. Because the skills the employers look for, just don't matter when you take a masters. Perhaps in other fields like Business or Medical, it makes a difference, but if your goal is to be a developer and not contributete anything research wise, then master is pointless.

People can disagree with me, but I am spitting facts here, based on industry standards.

So back to your question. You do know how to code, if you didn't you would'nt have got a BSc.

If you are not confident, get a introductory job, or go to youtube, create some projects, and learn.

  • 1
    Can you believe that I wouldn't have known what a WEB API was if I just followed my courses, finished university, and finished grad school? — Yes. Quite easily.
    – JeffE
    Jun 26 '19 at 13:38
  • 1
    No, I downvoted because having a BSc does not imply knowing how to code. I have certainly met CS graduates who can't program in any useful capacity, myself included, and I'm a CS professor. And I have heard many tales of students squeaking through my department's undergrad program, even with reasonable grades, doing as little as possible on their own and relying on friends, github, CourseHero/Chegg/Koofers, and StackExchange for everything else. Perhaps OP is merely suffering from impostor syndrome, but it's naive to believe that they can't be telling the truth.
    – JeffE
    Jun 26 '19 at 13:52
  • 1
    @KSplitX I don't think that JeffE is saying that a CS degree can't teach you how to program, just that graduating with that degree doesn't guarantee that the person actually did learn how to program. Some departments and systems are better than others at weeding out the people who aren't actually learning, but it is totally plausible to me that some of the people I graduated with had next to zero ability to actually program
    – Kevin
    Jun 26 '19 at 18:10
  • 1
    I can tell you the university I was in, does not cover coding whatsoever in its computer science bachelors, as they consider that engineering. It covers the mathematical theory behind computer and system design and the theoretical basis behind programming. However it does not teach any programming techniques or languages on the grounds they change too often to be worth it. (I wasn't a CS student, I was in computer engineering but I confirmed this with the faculty staff)
    – Vality
    Jun 26 '19 at 23:25
  • 1
    @Vality At my university there weren't two separate departments for computer science and computer engineering, and our computer science degree was heavily programming based, but I'm sure if someone were totally disinterested in actually lerning how to code they could have figured out how to coast by through mooching off of team mates for larger projects and using the internet to piece together the rest. It was a small enough department that one of the professors would probably notice and bring it up with them or the other professors, but it isn't impossible
    – Kevin
    Jun 27 '19 at 5:00

If anything, I would consider taking some online courses on programming before jumping into a Ph.D, if you want to be able to program. I also second the concern that this could be imposter syndrome. Taking some courses online (not through a university) and taking the time to learn the programming languages may help you realize you know more than you thought you did, or it will help you catch up and get you where you need to be. Either way it is beneficial.

Complete applied projects while learning to showcase during interviews and prove you have the knowledge and capabilities even though you don't have the experience. This combined with the Master degree should open many doors for you.

Also, there are roles in software development that do not require you to be the one doing all the coding. Have you taken any courses on project management or business analysis? If you do not want to be the one programming, there are plenty of other roles to be filled in technical fields. You may want to research other roles.

I understand how stressful this scenario is and I wish you luck.


Education is there to teach you how to learn, develop your knowledge, and find what you're interested in doing in the future. It is not there to prepare you for the real world; that's what internships and traineeships are for, amongst entry-level jobs in general.

An employee who learns things quickly and efficiently when given the right guidance is what companies are looking for. It takes some longer than others to get to this point, and to have the confidence to consider themselves worthy of a position they were educated for.

I wouldn't panic just yet - you haven't entered a work place yet. However, when you get to the point where you feel like you hit the wall I suggest that you don't give up, because perseverance is a skill you will need in every job.

Apply for places and show your true self in the interview. Try to be as much prepared as possible. Don't judge yourself harshly just yet.


This isn't really an answer, but it's not really a comment either, but it's more of an answer than a comment, so here it is.

In programming, there's way more to know than can be retained.

I've been a professional dev for almost 7 years, and have used almost 20 distinct languages in around 25 years since I started learning programming. I still have to look up the way to use "substring" every time I use it, since it's different between JavaScript, PHP, C#, Java, etc. As many times as I've used "substring" in those languages, I just can't remember which one does what and parameters plus param order.

Simply, you don't need to internalize everything, only what's currently needed. This is especially relevant to newer programmers/coders/devs/engineers. As you develop your career, the things you thought were necessary in school may not be what's actually necessary in a job. As you gain more experience, you'll internalize the things you really need. Anything you forgot can generally be Googled. You'll also learn more from senior devs than professors, and you'll teach other devs in turn.

Don't worry so much about what you think you know. That will change over time and why an interview is often more enlightening than your resume.


I would like to add my two cents.

I think that at this point, the most important decision to make is - what is it you actually want to do to earn money. It is very hard to proceed without making this decision.

Your options are:

  • Code

  • Manage

  • Teach

  • none of the above

You can try actual coding by participating in an open source project. This will give you a taste of what it actually is.

You can go into software project management. This is a totally different skill. May be this is what you are good at.

With PhD you will be able to teach programming, albeit without ability to do so. Working in academia requires a totally different set of skills.

The last option is very interesting. I know lots of people with dual majors who kinda program, but they are closer to the business side of it. Say, with a major in Accounting you could build and support accounting systems. With a tax license, you could build and support tax systems. With some systems knowledge you can do systems integration.

My point here is that commercial coding is not the only option for a holder of a Software Engineering diploma.

Hope this helped.


You should believe in yourself. If you really like to study for a PhD, go to study. If you don't like it, start an internship and accept the challenge from now on, because this day will come sooner or later.

  • This does not answer any of the questions at hand. How is he supposed to do an internship if he has no experience. Etc.
    – K Split X
    Jun 27 '19 at 14:18

It is hard for me to believe you. I just graduated as a Software Engineer and well, we programmed and programmed since first year. Our exams were different every year on different programming problems (of course, maths exams, dbs, some theoretical parts in concurrence or whatever, do not fit in here). But having not learned to program in a full degree + masters, it just makes me think the university is not that top as it should be.

Taking that aside, I got the question for you. Do you like programming?.

If you do, you'll have no problem in learning and soing stuff at home by your own. Free coursera practical courses, etc. I do not really see the deal here...

This site is temporarily in read only mode and not accepting new answers.

Not the answer you're looking for? Browse other questions tagged .