A lot of the other posters have given some great advice from a technical perspective. I'd suggest taking some time to evaluate and improve your mental health as well. If you're putting yourself under so much pressure, that pressure alone will hold you back to a great extent.
First off, just relax. Take a little time off to reset your psyche, overcome your burnout, and rediscover your confidence/interest. It's amazing what taking a week off can do.
Take up some activities that have been shown to help with stress relief. Meditation. Exercise. Long walks. Digital disconnects. Healthy sleep cycle.
Read this book: The Inner Game of Tennis. It's a short read, but it will transform the way you approach high-pressure situations.
You mentioned PTSD - do you actually have PTSD, anxiety, or other similar mental health problems? If so, talk to a counselor or find some way to address those underlying issues.
You have a long career window ahead of you, so don't burn yourself out at this point. Job prospects are great for CS majors, and you seem like a guy who's very motivated and hard working. Spend a bit of time taking care of yourself, and I'm sure you'll be fine in the long haul.
By all means see a counsellor or a psychologist, but unless you have deep psychological issues where you are getting to an unbelievably unbearable point where medication might help you, see a psychologist first and leave the psychiatrist out of it.
And, in case anyone thinks I hate psychiatrists - I don’t. I just feel they aren’t that helpful in the sort of situations you describe here.
Unfortunately, for every great psychiatrist, there are just as many truly awful ones and despite their medical degree they can totally botch your diagnosis.
That’s my opinion anyway, take it as you will.
For what it's worth, antidepressants have a very valid part to play in the treatment of depression, as do various other psychopharmacologies. I've taken medication for performance anxiety in the past and it helped me overcome some real challenges.
That said, talk therapy with a good psychologist is also very useful both alone and in combination with drugs.
I ended up taking about 2 years to examine and reflect upon my situation. Meditation played a huge part during this time. I traveled, explored new hobbies and ideas, and experienced different ways of life. I eventually ended up moving back home to live with my parents as I continued to sort things out.
Currently, I feel much more stable and have a clearer idea of how I want to move forward. I now have a plan to move out and pursue a career utilizing my degree and feel very excited about the future. Taking time off to reflect in this way has been indispensable for me.
Also:
You do not have to ace the interview just show promise.
What I mean is, even I've gone through interviews where I didn't know all the answers and they still kept wanting to follow up with me. Don't be too harsh on yourself.
Absolutely this. The primary purpose of the interview is to establish whether or not you are competent enough to do the job. This doesn't necessarily mean having all of the skills out of the box, but whether you are capable of picking them up and have the basis to do so. Best piece of advice I could give is don't lie. If you don't know the answer, say so. But, better to follow up with "...but, this how I think it might work" or "...but, this is how I would go about finding the solution".
One of my purposes in interviews was literally to get the candidate to say they didn't know. We can work with people that know their limits; can't work with a bumbling fool that knows no bounds.
This. It's ok to admit you don't know everything in an interview. Some of my most glowing feedback from interviews came from interviews where I answered questions with a flat out "I don't know"
I saw that itamarst posted a link for a list of companies who don't do "whiteboard interviews" type of questions. If you believe you're a good dev and can build stuff and just hate those interviews, I would encourage you to start there and try interviewing at those companies and land your first professional job, and see if you're really cut out for a software engineer role.
This is what interviewing is like in 99% of other sectors, even engineering. You might be asked some competency based questions at a larger organisation but the whole “dance like a monkey in a high pressure environment while we watch” whiteboard/coding test feels like cruel and unusual punishment to me that is nothing like the job of actually programming.
The trouble is, the skillet to do so is not actually overlapping with the one needed for prolonged deep or repetitive work. So you end up hiring either fresh heads from such pressuring environments, super geniuses (yeah right) or people who learned to pass and game these tests.
I have absolutely no hard evidence to back this up other than anecdotes from my network of colleagues, but the only places I've ever heard of doing programming challenges during an interview is the kind of places where programmers collect en masse. SV, Seattle, Austin, NYC, Boston, the places where when you post a CS job, you expect thousands of qualified candidates to apply.
the whole “dance like a monkey in a high pressure
environment while we watch” whiteboard/coding test
feels like cruel and unusual punishment to me
When I was a teenager I attended a group interview for a retail job, and we were put into groups and told to design a TV advert for the retailer then act it out in front of the other interviewees. Of course my group decided to do a song.Once you've been inoculated by having to sing in front of a room of 30 people, whiteboard coding in front of 2 people feels downright respectful and dignified :)
Similar story for me. Although I wont go so far as saying I am a rockstar I do have a reputation for building solid, maintainable, reliable code that works even though I have struggled in the high-pressure whiteboarding interviews (I'm currently at a company that is well-known/infamous for whiteboarding interviews too).
There are different roles other than "software engineer" that are programming based, even at FANG-style companies (in my personal experience). At my current employer although I spend my entire day designing/writing/debugging code using the same tools, infrastructure, programming languages, and expectations on code-standards/quality etc I am not a "software engineer" as far as my job role goes. My role still has "engineer" in the title, but the expectations for the purest CS knowledge were slightly lower and the interviews were basically a chat about work I had done elsewhere and a few general questions around experience and knowledge (salary/total comp is about ~85% what a software engineer gets)
tl;dr - you dont have to be a "software engineer" to program for a living
Another +1 here. I got so sick of programming interviews that I went freelance. If at any time a potential client suggests I need to do a whiteboard style interview, I decline and offer to work for them for a week at half price.
Over 15 years professional experience here, master's degree in CS, and I often struggle with whiteboarding. Looking for a new job now and some of the questions I've been asked:
1. Overlapping maximal interval sets (https://www.geeksforgeeks.org/find-the-point-where-maximum-i...)
2. Print a matrix in a spiral form (https://www.geeksforgeeks.org/print-a-given-matrix-in-spiral...)
3. Implement setInterval using setTimeout (recursion)
4. Shorten a string of repeated letters (dddbbbaa) into numerical format (3d3b2a). also write function to reverse this process
5. Given this JSON input, write an API in NodeJS
6. Write an algorithm to convert decimals to Roman numerals (https://www.geeksforgeeks.org/converting-decimal-number-lyin...)
7. Convert from prefix to postfix notation (https://www.geeksforgeeks.org/prefix-postfix-conversion/)
I could go on and on. So stupid. How does answering any of these on the fly signal ability as a programmer?
The take-home tests are the least offensive to me, because at least they simulate what it's like to work on a real project (somewhat).
The HackerRank.com tests aren't any better than live whiteboarding -- why can't I look stuff up (they disable copying and pasting)? Are you not allowed to look stuff up at a real job?
All these stupid questions implicitly assume the same thing: the most important developer skill is memorizing a large corpus of algorithms to obscure problems.
Trust me, it's not.
It'll probably take one of the FANG companies to start de-emphasizing this nonsense before everyone else stops mimicking them.
Are you sure you're not reinventing established theories and algorithms? Those problems are supposed to be hard because they're based on ideas discovered by the most brilliant minds. If you can do them in 2-5 hours with no background you might actually be real good.
Depending on what level of familiarity you have with the material, you might be selling yourself really short. Deliberate thinkers (often misunderstood even by themselves as "slow") are often the most reliable because they take the time to understand and think things through.
Please take a deep breath and start with a reasonable supposition. If "easy" problems are taking too long for you, maybe there's an easy way to "solve" it (memorizing the patterns and knowing the most likely to be tested algorithms).
Like others say in this thread, not only are those problems unrealistic, it's much like test prep for standardized tests that you may have taken getting into college.
To OP: you spent a couple years in college and got yourself a CS degree. Congrats. It is not an obligation to spend the rest of your life doing something you dislike. You might try a software job for a year to see how you like it, or maybe it's already time to change direction. Do you already have something else in mind you'd like to do?
> Those problems are supposed to be hard because they're based on ideas discovered by the most brilliant minds. If you can do them in 2-5 hours with no background you might actually be real good.
Putting myself in the OP's shoes, this would be really frustrating advice to hear. The OP literally said they already got a CS degree and that these are "easy problems" taking them 2-5 hours. Baselessly calling into question their own assessment of problem difficulty (as if it's likely that they're that clueless about how difficult interview problems are supposed to be after having received a CS degree) while simultaneously suggesting they might actually be brilliant and simply not realizing it is, honestly, just unhelpful advice, if not potentially actively harmful. If you're going to do this, at least ask them to post a question or two so you can independently gauge their assessment first.
In particular, having a CS degree and finding that you're having trouble with what you believe to be easy interview problems (to emphasize: actually having trouble, not merely thinking that you might have trouble if you were to try) is not in any way evidence that you're experiencing impostor syndrome, of all things. It might be evidence that you don't have enough practice, or you didn't learn the material well, or that you lack motivation, or that you just don't find the topic interesting, etc... but the one thing it does not mean (in the absence of extra evidence) is that you're actually brilliant and yet also incapable of assessing the difficulty of interview problems accurately.
1. OP seemed locked in a spiral of negativity that was aggravating performance anxiety.
2. OP was actually able to solve problems and I assumed OP is not talking about "Fizz Buzz" class problems.
3. OP was nowhere to be found in the comments at the time of posting so I wanted the comment to be realistic but positive and also encourage others struggling with similar issues to take a deep breath and objectively reassess their situation rather than assuming everything is a waste and they truly aren't cut out for it.
As an aside, having just read OP's comment history[1], while he likes problem solving, his main motivation is money (extrinsic motivation) and he seems prone to analysis paralysis and anxiety about raw ability/intelligence. Based on that I wouldn't encourage OP to pursue something that stresses them out and aren't confident in purely for money.
There is enough good advice and feedback in this entire thread for a meaningful discussion with OP. Without the OP's feedback our discussion will only be trading assumptions and suppositions but thanks for the honest feedback, duly noted.
This is what I also gained, and to me, it says that OP has the ability to solve these problems in much less time. I was a lot like OP when I started out. In college, I would get good marks but be one of the last people submitting a test. Whiteboard-style problems would take me forever to complete. I constantly felt that even though I could get it right, it took too long to be of any use.
My problem was much of what you said: I was reinventing crude versions of the wheel while spending an inordinate amount of time comparing different ways to solve problems. I'm not some brilliant mind that's going to have a ubiquitous name in the annals of CS. I've just been really good at breaking down problems and tasks, and early on, I was writing things akin to FizzBuzz EE[0] rather than a 10 line solution that solved the problem.
[0]: https://github.com/EnterpriseQualityCoding/FizzBuzzEnterpris...
Exactly this. The way this game works that you and the interviewer have read the same book. He or she asks you a “difficult” question, you pretend to think about it, then rattle off the answer you memorised from the book. The interviewer is then satisfied that you read the same blogs and follow the same people on Twitter as them, which is what this is really a test for, and you pass. There is zero correlation between any of this and actually working in the industry
Even if you don't find some quicker algorithm, bruteforcing usually still works.
But I can't say programming as a career is definitely something every CS major should make their goal. Having a better relationship to coding is something that can be handled gradually with less stress.
There is plenty to do in theory and there are plenty of related fields that benefit from a CS background even if one doesn't code. Really, any science/math/statistics masters degree should be considered with those that need the most scientific computing being the best choices for a CS graduate.
A CS BS that does a master's in another science might end up programming in R and it isn't really all that different. But the stresses, sense of competition and expectations won't be the same.
I wrote a comment that I realize should have been part of the original post on hindsight. It may give you more content if you choose to respond.
Sit back, relax, go talk to someone who actually does the job, and re-evaluate once you're better contextualized.
employers can't screen for it because there's no paper trail.
It's especially unnecessary in a thread like this one where OP is doubting his skills and choices, and looking for help/direction.
In this context, it might actually help OP to relax a bit - the message is "Don't worry, you don't have to be a programming contest winner in order to work as a programmer. Many programming jobs are much lower stress and lower cognitive load than that", and abledon's description certainly matches my own programming job more than, e.g. what was described in the other "What was it like to be a software engineer at NeXT?" post on HN.
If it's The Social Network style code-bro'ing, coding the cure to cancer, etc; well that's pretty easy to find too.
There's a difference between a mechanical engineer, and a car technician. There's a difference between serious algorithmic work, and code-monkey work. One is more demanding than the other.
and, of course, writing HN comments.
Also
> (They do exist, even if they're not as common as they should be.)
I'm curious why you think interviews _should_ be non-algorithmic. How do you propose interviews be done? How else are you supposed to find if someone can employ critical thinking + has the necessary programming skills? And yes, most interview questions _are_ original and not straight from Leetcode so they do demonstrate critical thinking + programming skills.
I keep it very short. I try to make it low stress. I try to make it fun and funny. Why? I really want to know if the candidate can work with me and how they will work. I don’t care one bit whether they can remember the big O notation of a red-black tree search or whether they know how to reimplement a complex datatype. I care how they will work with me in my environment.
You might say “you’re method is just too simplistic. People can game it and get through.” It’s been accused of that before. And frankly, I can memorize algorithms and game that interview. Try gaming me while we pair on some code and I try to toss in a few roadblocks. Try to game me as I try to see how you will react as we work together. It’s hard, and my methods have been quite successful for me.
As for the pay, I don’t pay people what Amazon, Google, and Facebook pay. But I pay very well and people stick with me so it seems to work out.
And by bug I do not mean super hidden tricky language feature you get to look up on language standard to not misuse.
Most people I meet haven't had my path to success, but it is possible. My gut feeling is that I'm a small statistic because people give up quite easily when they think their goals are unattainable. My first programming position took me 15 interviews to land a job!
Pretty much nothing will accurately predict how well someone is going to do on the job. The best approximation is for them actually doing the job.
Also, the two most important things that we look/test for throughout the process are: 1) how good of a fit the candidate is for the team/company (do they get along with their team?) and 2) how enthusiastic they are about working with us (did they do some research on us ahead of time? are they excited about the opportunity?)
^ this is a doggone well-phrased and accurate summation of the challenge of team-building. Raw capability is by no means a predictor of how well someone'll work with the organization.
Besides, it's possible to take 2 weeks off of your current job.
On the “pay reasonably well” line, the average new college grad salary is 50K. I’d wager that the vast majority of salaries in the field exceed that. The googles of the world pay way in excess, and they may make you do some stupid dances to get in the door, but that’s not the real world, that’s just one weird part of the world.
That's a problem for people who haven't done internships and have just graduated. Architecture skills and knowing how things are/should be designed come from experience, which a lot of people don't have.
On the other hand, algorithms + data structure knowledge and how they're applied do not really require experience, just knowing fundamentals well.
So your method is definitely good for experienced people but not for new grads/interns. And these are methods the industry employs anyway — big companies do stress more on system design for industry hires, less so for new grads + interns.
Leetcode style questions almost never require anything resembling critical thinking. The only thing they demonstrate is problem solving under pressure.
Background: I've been a programmer for 33 years. I have never (directly) used a tree of any kind. (I've used STL and Java maps, which I think are trees under the hood.) Asking me to do something with a tree in an interview question is therefore probably a sub-optimal way of determining whether I'm a good fit. Yes, I know what a tree is. No, I don't know it like the back of my hand, and I don't know the algorithms in detail. Yes, I could probably figure it out during an interview. But expecting me to know that background when I come into an interview, when I have never used it so far in a pretty long career, and so I'm probably not going to actually use it at the new place either... that's asking me to memorize a bunch of stuff that isn't actually going to be useful on the job. That's a bogus interview approach.
Algorithmic questions should be something that the interviewee hasn't memorized the answer to, but also that they don't need to have memorized a bunch of background or know the "trick" to be able to answer.
Now, I'm in kind of a different world. I've worked mostly in embedded systems. If you're interviewing for a job where they use a lot of trees in their data structures, you probably ought to know them. If you are interviewing at one of the big boys (Google, Facebook, et al), where an improvement in the structure you use to represent the data can mean that you need several thousand fewer machines, they are going to really care about your grasp of the nuances of data structures. But, despite Google's size, most jobs are not at Google, or at that type of place.
If you're going to classify only Google, Facebook, Amazon, and their ilk as "paying reasonably well", then I do not agree with your definition, but I will agree that you'd better be able to pass Leetcode-type questions in their interviews.
Don't listen to people telling you that you shouldn't be a programmer. Doing these sort of puzzles has very little to do with 90% of what programmers do. There are jobs that need these algorithm skills, sure, but they're not the default jobs.
On the other hand, it's not a waste of time for a young person to just go through a few of these a week as they are job hunting. And you really do get better at them as you do more and more. Certain patterns repeat, and the tricky ones usually have nice explanations that you can certainly learn from. They are also FUN if you do them in a stress-free situation outside an interview.
I'm ready to be downvoted for this, but if you can't solve a problem in 15-20 minutes, just look at the solution, understand it, and memorize it. The more problems you work on the better your pattern recognition will get, and it'll be easier to solve related problems. Unless you're a genius programmer, I seriously doubt most normal people can easily and flawlessly answer these stupid questions within 15 minutes in an interview setting.
Also keep in mind that the vast majority of interviewers will tell you that they're looking for a good thought process as opposed to the correct solution, but they're 100% full of shit so don't believe what they say. There are hundreds of engineers who have already memorized 300+ leetcode problems and WILL write correct and bug-free code in an interview setting, and they will get the job no matter how good your "thought process" is. However, there are SOME companies that care about thought process, and those are the ones you have to look for. Unfortunately I haven't found out how to determine which companies actually do that, but typically they're start-ups. This only applies if you're in the Bay Area, however. I can't comment on what it's like outside of California.
I feel like nobody in the thread truly read your original post. You asked for alternative career options because you can't solve leetcode problems and that's absolutely ridiculous. You can absolutely get hired as a software engineer, you just have to play the game. Keep leetcoding and you'll eventually crack an interview. It's just a numbers game. Good luck!
I don't advocate memorizing solutions because I don't think it sticks. I prefer to look at the solution and implement the algorithm myself. Pattern recognition is key though. And I too believe that most interviewers who say they're looking for "thought process" are full of shit. Partly because the question always seems easier to the interviewer and than the interviewee. But mostly because all the candidates who did grind through hundreds or thousands of leetcode, hackerrank, careercup and/or topcoder problems have skewed what normal interview performance looks like.
I'm very interested in this divide between people who are for white board interviews and against it and how it correlates with job performance and content. I may make a separate post about it because I'd like to get to the bottom of it.
I agree and I think its illegal to do so. Its a form of discrimination so they have disguised it as a "coding challenge".
I am actively interviewing right now. Also interviewed at FANG companies. This is absolutely 100% correct. Those people don't give shit about thought process as much as they do about correct bug free solution under 15 minutes. If you take even JUST 2 MINUTES to think they start looking at you suspiciously and reject you in their mind. This is really a fucked up situation.
You basically handle all of the technical things that are over the heads of the normal sales team, both pre and post sales. This will often look like integration type work -- trying to figure out how to make your companies product work in the prospect/customer's environment.
It's a very different role, but also valuable, and having any kind or CS background may put you ahead in many companies.
I got into programming because I like creating things, having ideas and making them happen. Algorithms like you find in programming puzzles rarely stand in your way to create things. GoogleFu / BingJitsu tends to solve most problems pretty quick.
Now your search skills often depend on what you are aware of to look for
I enjoy programming puzzles from time to time, usually advent of code, but I also don't get a huge level of satisfaction from solving those problems so I don't do them all and often just cherry pick the most interesting ones after the event is over. Often the most interesting thing is to see what techniques other people used to solve it. Which is really the key point for a professional software developer :- be aware of techniques and know what kind of problems they can be used for. Often techniques can be applied to problems in ways that are just not obvious.
So, first piece of advice, look for jobs that don't do puzzle based interviewing. Smaller companies are good targets, they don't need to do formula based recruiting ( however many do try to copy big players approaches to interviewing )
Ok, so maybe you really don't want to be a dev...but there are other specialist areas, like testing, devops, UI (Ux). But that would greatly depend on what you enjoy.
If none of it is of interest, then there is all kinds of tangential roles, recruiters, product management, HR. But may require further study.
Just work out what you really like doing
As other people here have asked, do you enjoy programming as a past time? Do you write stupid little things for youself? Have you made N websites for yourself? Have you compiled the Linux kernel just for fun? If the answer is "yes, I like doing things like this in my past time", then you're on the right track to be a programmer. If no, then maybe not. In that case, you can still be a good programmer, google "cal newport follow your passion is bad advice".
In any case, if you decide you don't want to be a programmer, a good parallel path you could go into (which friends of mine who aren't really interested in programming have gone into) is Data/Analytics/DataScience. Essentially you can make roughly equivalent money by helping companies make decisions based on their data. There is a stack of roles here, from infra, to data engineer, all sorts of analyists, data scientists, and so on (the division is not clear). If you want, you can have a very rewarding and successful career here and just do SQL if you go into the Analytics/Data Science region of the stack, you don't even have to write Python on an everyday basis.
If you are getting interviews then bombing them all - then you can start to worry. If you really don't get anywhere you can try looking for QA/test jobs where you usually have to know a bit about software and end up writing scripts and maybe move into dev later with some more practice.
Don't make any rash decisions. Practice with an answer key and fix mistakes in solving mundane problems rapidly. Repeat. Struggle is overrated compared to repetition and quick correction.
Good luck! Wish you the best.
Just to offer a differing view, I would posit the exact opposite: struggle is underrated compared to repetition and quick correction. The latter is prone to blind memorization, and in my experience, many CS interview questions have a core idea or central motif that aren't apparent until after a long thought.
I don't think that either of struggle or rapid repetition are "wrong", but rather, everyone should experiment with both styles and find some middle ground between the two.
and yet its impossible to figure out a central / repeating motif if you haven't actually done a lot of the same kind of questions.
sitting down and thinking things through is generally the final phase, in which you're improving the most. In order to get there, a varying degree of repetition is necessary.
If you have a CS degree, it is almost 100% certain that you are qualified to do programming at a bank or insurance company or whatever at the very least. If you're scared of the intimidating tech companies, then just skip them and go work somewhere that'll be less stressful.
People will joke that you should go into management. Maybe, but I’ve never heard of anyone going from a CS degree to managing programmers directly.
If I were talking to someone who was one year into a degree and hating it, I would really push the idea of getting a technical vocational training in something like HVAC, plumbing, or electrical. Those careers require a lot more from you physically, but not as much mentally and the pay is really good. Better than you’re likely to get as some kind of administrative person. But there are other trade offs.
I think a lot of people here are calling your bluff, because if you really didn’t like it, why are you reading HN? But you should know that you can have a good and fulfilling life not programming. But understand that you will probably make less money, often a lot less. You are the only person who can decide if it will be a better life for you to do something else with less money or to do something you dislike for more.
There are lots of people who cannot program or dislike it who nevertheless manage to eek a career out of it. I can’t in good conscience tell you to do that, because they cause the rest of us a lot of stress and what kind of life is that, where you spend every night sleeping fitfully trying to convince yourself that you fooled us yesterday (you didn’t) and just need to fake it a little longer. So don’t. Find something that you enjoy and do that instead.
You 100% have time to do something else. Just stop and do something else. Don’t torture yourself. You are what, 23? Go get some more loans and get a degree or certificate in something you want to do, and live your life for yourself.
It's not as much as I'd make as a software developer; but I never had any student loans to worry about and what software devs are working 35 hour weeks and still make bank?
There are plenty of jobs you can do with a CS degree that don't involve being a programmer, as others have mentioned. Don't feel you need to work in that field either. A friend I did my BSc Biology with is now a financial advisor with one of the big four banks in Australia. Having any degree is good, having a STEM degree is even better.
Also, it sounds like a lot of this is in your head. You should talk about it to a close friend or someone you trust :)
One possibility is you just aren’t wired for the interview process, but could make a competent programmer given the chance. The other is you got the degree. It just aren’t wired for programming in general.
In either case there are a lot of near-programming jobs where your CS degree can be valuable. Thing Sales engineering if you are outgoing, QA if not, and technical support if you are in the middle. All 3 allow you to be technical, and can lead to programming jobs if you are so inclined. And all 3 positions are filled with people who wish they had a CS degree.
Get out there and interview if its important to you. The more interviews you fail the better you will get at them! If you wish to master the silly technical interviews IMO the best way is to throw yourself into the fire.
I don't know your situation, but there are plenty of respectable jobs you can get with a CS degree without being a master of CTCI. It won't be Amazon or Netflix but it's okay, most people don't work at a Facebook/Amazon/Apple/Netflix/Google.
That said, is there any type of programming are you good at? What actual work have you done? Have you shipped an iPhone app or launched a basic website? Were your comp sci courses brutally hard and you spent hours working at them and barely eked out a degree?
I’m asking because you just may be failing because of anxiety, not “stupidity”.
No, not everyone requires certification to be a PM, but many places do, and in many cases it helps get past the resume filtering process.
So get a PMP cert if you want, or don't and find a company that isn't going to discriminate on the lack of a certification. It costs a bit of sanity and $500 some to pad PMI's coffers, but its basically paying $500 for your resume going to the top of the stack. Sucks, but it is how it is for a large enough number of companies to matter.
"Defacto" may be the wrong word, perhaps "ubiquitous" would be more correct, but your point is valid.
This particular PDF [1] really helped me understand the roles better.
I also read the book "The Product Manager's Survival Guide" (ISBN-10: 007180546X) and found it to be a pretty good basic introduction, when I needed it.
Lastly, nothing beats having cross-disciplinary experience by chance in any job. What lead me into product management was always "getting stuck in the middle" because I was equally capable of being technical as well as talking with a user and understanding their needs. I was more of a Technical Product Manager, however, than a pure Product Manager (an important distinction).
[1] This is a legit download - "The Strategic Role of Product Management" it's a link to a PDF on the Pragmatic Marketing website - https://cdn.agilitycms.com/pragmatic-marketing-v2/SRPM_PM180...
Anyway, self-taught is the only way here. I have an imposer syndrome when I graduated. It does make feel better knowing that one of the best guys in our class, who we assume is already a CS guru at the very beginning, actually knows nothing about programming at that beginning. He was faking it to project confidence to us, but after getting positive feedback from the environment, he actually gained the momentum to learn and understand CS as the guru we thought he was. So it is not too late to do it all over again.
Hope this helps. :)
You have more to offer than you realize!
I've been working as a software engineer at companies that don't ask riddles for about 8 years, and I've been on both sides of the technical interview many times. As the interview-ee, there's exactly one interview I actually left feeling like I'd nailed it, but several others from which I received offers, some of which turned into perfectly fine jobs. As the interview-er, I've learned that I'm looking for a multitude of factors, of which technical proficiency isn't even the most important. In other words, while there is a technical bar to pass, it's usually lower than the interviewee thinks it is.
I doubt we live in the same metro area, and even if we do my current employer is not hiring. I'd be happy to run a fake, no pressure ~20-30 minute phone-screen with you, and then offer feedback. jmkimmel at gmail
1. Talk to a therapist about your stress/anxiety issues. This can totally kill an interview even if you're qualified, and is probably a bigger issue than your perceived lack of skill. Xanax or other anxiety drugs can help a ton for interview days, but talk to a therapist first.
2. Keep trying. It can take a surprisingly long time to land your first job.
I strongly suggest you make some time with a counselor, and let him/her help you understand the real causes of your anxiety, and find a path towards managing it. This is what they do for a living, and AFAICT most of them are pretty decent at it.
My guess is that you'll have a better chance of enjoying programming, and perhaps performing better at it, once you get a handle on the anxiety.
The others in this thread are right of course. Make sure your mental health is good. Make sure you try other approaches to finding a job in CS. And so on.
I would just like to add another thing you can try: Give yourself a break, go for holidays for the first week of thr break and then afterwards do something else that's hard. Study a science. Study electronic circuit design and build something. Read about architecture and design a building. Or something else. Just something else than CS and challenge yourself.
(I mean, don't sign up for a university course, better just read some textbooks or online resources.)
Do this for a couple of days or weeks. And try to figure out if you are good at it.
If you hate everything, then please, seriously, talk to somebody about your mental health. Maybe you are burned out or have a depression. It can happen to everyone and it can be fixed.
Maybe you also just need more holidays or don't like work in general. I'm not excluding that possibility, I think that's a totally okay feeling to have but I also don't see a reason to assume that this applies to you.
However, if you find something that keeps you interested for hours every day and where you feel like you're good at it, congratulations. Maybe CS just isn't for you. I'm not saying that you should then become an Architect or Electronics Engineer or whatever it was that captured you. (You can, of course, but that's a long term thing I'd say.)
What I'm saying is that after having determined CS as the source of the problem for you, you can now look for alterations that are fun for you. Maybe you could be a product manager? You don't need to code, but it really helps if you know the language that developers speak. There are many other options as well I'm sure.
Work in the world of avionics and help figure out what is needed for airplane manufacturers, pilots, or the manufacturers of the hardware and software for the many boxes that make modern air travel safe and reliable.
It involves writing English and logic and attention to detail, but it does not require coding. It helps to know the broad ideas behind coding, but isn’t necessary to write algorithms or otherwise solve problems in code.
I would strongly encourage this career path. Look to companies like Boeing, Garmin, United Technologies, and many more.
I will avoid asking other questions about your current predicament since many other people are asking you insightful questions. But if you truly don’t want to code, seriously consider systems engineering.
This was a good way to learn how to work with infrastructure 'hands on' and much less stressful than writing code, compared to my experience up to that point.
I ended up finding a route into development where I wasn't banging my head against so many walls, and was enjoying it, then stuck with it for about 12 years.
If you got a CS degree, you're capable of writing code, but you don't have to do it _now_.
Thankfully, a number of good companies don’t use silly brain teasers to select candidates, opting for pair programming exercises instead.
I would advise spending time learning about TDD, agile etc
Do not hesitate to talk to a head hunter and explain the situation to him, he may have some jobs you might be interested in even though you never thought of it.
Warm vibes, I hope you'll love what you'll do someday.
I don't think "being too stupid" is that factor. I mean... you're smart enough to graduate with a CS degree!
Are you doing these interview prep just because you enjoy the training, or are you in "cram mode" trying to force yourself to get better?
> Even if I get a problem right, I gain little to no satisfaction at this point.
In order to make "deliberate practice" like this less stressful, you should establish a baseline of doing some task in a way that makes you enjoy it.
Step aside from interview prep, take a few days and focus on anything other than programming, then casually think about what YOU want to create -- for your own personal use/enjoyment -- to satisfy your creativity. Not to "grind" and get better at it -- but simply to tinker and fiddle and read and discover.
Once you're programming (or maybe reading, or writing, or painting, or making music etc...) just "for the kicks," you might try to dive deeper into a part that you don't understand well -- if you're not going anywhere, take a step back into the comfort zone, and do what you enjoy for a while, then try something harder again.
My advice is, don't try to solve all the leetcode problems, you won't succeed. Focus on one area, one area only: strings, backtracking, recursion, etc. and master it. Live and breathe those problems. Watch videos. You learn programming by doing, not watching or reading and assuring yourself you'll know when the time comes. No copy paste ever!
Pramp is also a good peer interview platform, use that as a test.
I have faith in you. Don't give up on CS.
Also you can checkout the PM route - as "PMs who can code are gold"
However, it sounds like you may be dealing with some mental health issues if you’re dealing with PTSD-like stress trying to do programming challenges. Please consider finding counseling at some point on your journey as this could be affecting more than just your enjoyment of programming
Code camps and uni are a good start, but if you want to actually know what you are doing, it takes years of experience, there is no way around this.
> Easy problems take me 2-5 hours
This is fairly typical of someone learning programming for the first time, it is also typical of someone coming out of uni with a degree. I wouldn't worry about it and just keep at it.
> Even if I get a problem right, I gain little to no satisfaction at this point.
Then quit this is the only reason people actually like programming.
Highly ignorant comment, makes everything else you're saying less credible. I'd say instead that STEM subjects are more conducive to instilling a certain style of thinking that's helpful for certain careers.
My experience is very far from what you describe. I learned ton of stuff from teachers who were mostly enthusiastic about the field they were teaching. Do you write from your own experience? do you have a degree?
Some universities (I would assume most) are businesses that print degrees and answer to shareholders, others are learning institutions that answer to students.
Just keep interviewing and realize that although some places will use these tests as secret handshakes to cull candidates, many more will try to evaluate YOU in a bigger picture: other aspects of your background and attributes, how they think you'll get along with the others, your grit, communication ability, and like-ability.
There is so much more to work than technical prowess (especially as measured by unrealistic quizzes). If your passion is software development, you are doing yourself a disservice to give up so early just because you are not performing the way you think you should be performing on puzzles.
Perhaps you need a mentor, someone that can give you some tips about your coding abilities and what you should do to improve.
If you need more than 10 minutes to sum the cubes of numbers from 1 to n in python, then I think you have a problem as a programmer.
Can you point to a leetcode problem that takes you 2-5 hours to solve?
Edited: Two weeks ago you submitted a similar post and in the comments you give this example:
>> To give a concrete example of some of the above, just this morning I tried to code the brute force solution following problem: Give two sorted arrays return the median. I spent over an hour trying to implement the brute force solution involving linearly going through each array and couldn’t code it in Python.
As a hobby programmer, my ten minutes approach:
def median(a,b):
...: ab = len(a)+len(b)
...: pos = ab/2
...: ia = 0
...: ib = 0
...: for ic in range(pos):
...: if a[ia] <= b[ib]:
...: x = a[ia]
...: ia = ia + 1
...: else:
...: x = b[ib]
...: ib = ib + 1
...: if ab % 2 == 1 :
...: return x
...: else:
...: return (x + max(a[ia],b[ib]))/2
...:
But it is not correctclass Solution: def findMedianSortedArrays(self, nums1, nums2): """ :type nums1: List[int] :type nums2: List[int] :rtype: float """
length = len(nums1) + len(nums2)
medianIndex = length // 2
ptr1 = 0
ptr2 = 0
curr = 0
flag = 0
if nums1[ptr1] < nums2[ptr2]:
val = nums1[ptr1]
else:
val = nums2[ptr2]
while curr < medianIndex:
if nums1[ptr1] == val:
if nums2[ptr2] < val:
curr += 1
ptr1 +=1
val = nums1[ptr1]
flag = 0
else:
if ptr1+1 < len(nums1) and abs(nums1[ptr1+1]) - abs(val) < abs(nums2[ptr2]) - abs(val):
curr+=1
ptr1+=1
val = nums1[ptr1]
flag = 0
else:
curr+=1
val = nums2[ptr2]
flag = 1
else:
if nums1[ptr1] < val:
curr += 1
ptr2 +=1
val = nums2[ptr2]
flag = 1
else:
if ptr2+1 < len(nums2) and abs(nums2[ptr2+1]) - abs(val) < abs(nums1[ptr1]) - abs(val):
curr+=1
ptr2+=1
val = nums2[ptr2]
flag = 1
else:
curr+=1
val = nums1[ptr1]
flag = 0
if flag == 1:
med = nums2[ptr2]
else:
med = nums1[ptr2]
if length % 2 == 0:
if med - nums1[ptr1 + 1] < med - nums2[ptr2 +1]:
return (med + nums1[ptr1+1])/2
else:
return (med + nums2[ptr2+1])/2
else:
return med
Here's what I wrote for your sum the cubes. Took me 1 minute. I hope I didn't misunderstand the question.def sumCubes(n): sumC = 0 for i in range(n+1): sumC += i 3 return sumC
I'll give you 2 more leetcode examples. Neither passed all test cases. The first is 2-3 hours. The latter 3. I didn't post the last submission for the latter one because I believe the one I posted is more telling of my thought process and coding ability imo so that solution is between 1 and 2 hours of work, but I wasn't able to get it in the end.
I honestly don't recall my idea here. I think it was to see if the start and end of the array had the same letter and if it didn't cut off the first and last letter and continue analyzing the array until the center is reached.
https://leetcode.com/problems/longest-palindromic-substring/...
class Solution: def longestPalindrome(self, s): """ :type s: str :rtype: str """ curr = "" big = ""
for c in s:
curr += c
if curr != curr[::-1]:
if len(curr[:len(curr)-1]) >= len(big):
big = curr[:len(curr)-1]
print(big)
while curr != curr[::-1]:
curr = curr[1:]
if len(curr) > len(big):
return curr
else:
return big
I thought there were 3 cases in this problem. You hit a character, you hit a ? or you hit . The first one meant an exact match had to be made. The second that there only had to be some character in the string to take a position (the string couldn't end if there was a ?). The last could mean 0 to n matches so there had to be a lot of checks in my mind. I also thought about what happens if there's "?" which I wrote as a case inside the "" if case. When test cases didn't work I would try and code for that test case and it kept going wrong so I eventually gave up and looked at the solution. My main flaw is that it didn't occur to me that backtracking was the way to go or a way to check all the potential combinations. I thought you just had to keep moving forward.https://leetcode.com/problems/wildcard-matching/description/
class Solution: def isMatch(self, s, p): """ :type s: str :type p: str :rtype: bool """ if len(p) == 0 and len(s) == 0: return True if len(p) == 0: return False
i = 0
j = 0
while i < len(s):
if j >= len(p) and p[len(p) - 1] != '*':
return False
if p[j] == '*':
while j < len(p) and p[j] == '*':
j+=1
if j == len(p):
break
elif p[j] == '?':
x = len(p)- j
while len(s) - i > x:
i+=1
while j < len(p) and p[j] == '?':
i+=1
j+=1
if i > len(s) or j >= len(p) and i < len(s):
print(i)
return False
if i == len(s) and j == len(p):
break
else:
while i < len(s) and p[j] != s[i]:
i+=1
if i == len(s):
return False
elif p[j] == '?':
i+=1
j+=1
else:
if p[j] != s[i]:
print(i, s[i])
print(j, p[j])
return False
i+=1
j+=1
if j < len(p):
while j < len(p) and p[j] =='*':
j+=1
if j == len(p) and p[j-1] == '*':
return True
else:
return False
return TrueThis kind of problems are designed to test you can define a grammar and apply recursion. Another problem with the same flavor could be to evaluate string expressions like "3+25" using a grammar. My one-hour solution (not checked). But I think I have done similar problems.
def pat(s,p):
...: if s == "":
...: if len(p)>1 and p[1] in "?*":
...: return pat(s,p[2:])
...: if p == "": return s == p
...: if len(p) == 1:
...: if p == "*": return True
...: return s == p
...: if len(p) == 2:
...: if p[1] == "?":
...: return s == p[0] or s==""
...: if p[1] == "*":
...: if s[0] != p[0]: return False
...: if s == p[0]: return True
...: return pat(s[1:],p)
...: if p[1] != "?" and p[1] != "*":
...: return s[0] == p[0] and pat(s[1:],p[1:])
...: if p[1] == "?":
...: if (s[0] != p[0]):
...: return pat(s,p[2:]))
...: if (s[0] == p[0]):
...: return pat(s[1:],p[2:]) or pat(s,p[2:])
...: if p[1] =="*":
...: if (s[0] != p[0]): return pat(s,p[2:])
...: return pat(s[1:],p) or pat(s,p[2:])
...:
...:On the other hand, using iterators in python is nice. You didn't use iterators to compute the sum of cubes, many problems can be solved in one line using iterators. https://www.datacamp.com/community/tutorials/python-iterator...
Perhaps your code should try to go from the easy cases to the complex cases in pattern matching.
As a hobby programmer I program without stress, if I was to make a living by programming I think I shouldn't enjoy so much.
I think you should read norvig post: http://norvig.com/21-days.html, also to learn to program in python: https://github.com/norvig/pytudes
I believe that in a year or two you could be prepared to judge your progress
Sum of cubes:
sum(i**3 for i in range(n+1))
findMedianSortedArrays using Haskell: let m a [] n = a !! n
m [] a n = a !! n
m (x:_) (y:_) 0 = if x<=y then x else y
m (x:xs) (y:ys) n = if x<=y then m xs (y:ys) (n-1)
else m (x:xs) ys (n-1)
let m1 a b = if odd n1 then m a b n12
else (m a b n12 + m a b (n12-1))/2
where n1 = length a + length b; n12 = div n1 2
let findMedianSortedArrays = m1
I haven't checked the code.It is not normal to feel like your world is ending when you're under pressure. Forget the rest of this stuff. You don't need more tests. Talk to a councillor with the aim they can fix or refer you onto CBT, or a psychiatrist to mediate.
There is no shame in this. Not dealing with it is only going to cause unnecessary suffering. Address it and your interviews and life at a whole will all go a lot better.
I know there's a lot of pressure here to work a 80h week but you can be financially independent without pressure. Just pick your battle.
You've got a skill. Believe it or not, programmers are needed all around the world. The pay is dramatically variable but so are living costs. Move. Find a nice town with a small software company that's hiring and start a life. Get your head straight. Read. Get a hobby. It's all much easier when you're not blowing $3k/month on a 1 bed studio.
You can also work shunt jobs directly for companies. Build websites, build apps. Lots of project management and quoting for things that never come to fruition but it's a job and very little overhead.
I'm not trying to put you down. I'm sure you can jump start you happiness the way you're desperately trying to... But stepping into a low pressure job somewhere where it's dirt cheap to live is a much healthier approach to the problem you have.
This happens to me too, especially when it comes to programming soft skills. Making code work per requirements is easy. Making it future proof is hard.
So make the thing work per the requirements and only then worry about debating best practices, OOP design, and the various other soft skills. For most of these soft skills debates, there will be no objective truth.
And when it comes time to deal with a hiring, promotion, or firing decision, do you think your manager cares whether your code is functional or object oriented? No, and he probably wouldn't recognize the difference, even if he had the time to evaluate your code. He's only looking at two things: 1) Are your projects delivered on time and in a working manner? 2) Do your peers complain about you?
All the hard stuff is only indirectly related, and is usually the realm of a senior engineer. Senior engineers aren't respected because they are familiar with some secret objective truth, they just have experience collected artistry that builds whatever seems to be good code. As a junior, you just need to do your best to internalize what they say, and paint a better picture next time.
If you are thinking about dropping this whole line, my advice to you is (1) do what you need to do to get a job as a software engineer; (2) walk away from it after two months.
Do anything else after this, but make sure you nail this sucker that is making you feel this way. Make sure you beat this challenge before walking away. I am from India, until a few years ago, every fresh graduate and I mean civil engineer, arts, mechanical engineer, electronic engineer, you name it, got a job at an Indian IT firm. 8 years hence, they are coding away, carrying on. People who don't even have the basics in CS are making it in the IT industry. You have a CS degree, get some use out of it. Don't listen to bullshit from others and yourself about doing something else. The most celebrated victories are comes from the individuals in the more dire situations.
But before anything else, start exercising a full hour every single day, eat and sleep well. Dress well throughout the day. Do this for a full week and start fresh next day if you fail. It will work like magic and help you pull your head out of wherever you have it parked. Oh and before you sleep, dream of making it through.
Software is going to be stressful, there are going to be time pressures. You might find an organization/industry where these are minimized. Medical, aerospace move at a very slow pace. I can think of a few companies in the industrial space where things move at a pretty slow pace as well.
Otherwise, software test, product management, documentation off the top of my head.
Asking for help is a good trait for a programmer to have. Good luck to you!
OT's can help with PTSD as well. [1]
[1, PDF] https://www.aota.org/-/media/corporate/files/aboutot/profess...
Then I suggest you look at interviewing for positions tangential to 'software engineer'. Look for entry-level positions in software quality assurance (QA), systems engineer, etc. Read the job descriptions and see if anything appeals to you. Often these jobs will pay less than a position as a software engineer, but they don't require programming but will value your CS degree.
Also don't necessarily get discouraged if you have a bad experience in one place. My first programming job didn't work out and the manager told me I wasn't suitable for programming. However my next employer was very happy with my work (and the pay was better too).
If you are going to stick with development find a niche that suits you. For example, don't ignore legacy technology. Many companies still have legacy code bases written in Delphi and cobol.
There aren't as many developers on the market for these roles and it can be less competitive.
Also consider suplimenting your CS degree with other skills. Or consider roles that are not purely programming roles.
On the other hand if you want to leave programming there are still options for you. There's more to computer science than programing.
There are tech support roles, QA testing, penetration testing, DBA for example.
Lots of other trails to take, maybe one of them will be a better fit. Good luck.
A good way to get on your feet(motivation wise) is to do easier things for a while, also something that really motivate. Maybe there's someone you know that have a problem that you can solve. If you feel that problems are too tough to do, pick something easier to get the flow going again.
The most important thing is to feel good! Like the most upvoted answer said, chill out. Increasing the pressure is not the answer. If it's anywhere near what my SO had, Yoga/structured days(doing something 1h, taking a walk, doing something 1h...)/dark rooms. The stress is real and should not be ignored. Getting a job that's completely off the field is not a bad thing either, you got yourself a CS degree, which you always will have in your back pocket. Doing something else will make you able to combine that degree with other work experience. And everyone else will think about you as a super human that actually get's computers ;)
I echo those who emphasize taking steps to avoid stressing out, and also those who advise considering other roles where your degree could come in handy.
Also, roles that have nothing to do with tech. Something excites you; take a swing at it.
CS is a particular kind of smart that not everyone is. And you don't have to be smart in that way in order to be successful.
The CS degree is really valuable regardless of how difficult or frustrating you feel about doing CS. It's objectively one of the most valuable and versatile degrees out there. Non tech roles in the space (PM, design, BD, tech sales are all strong industries) are all very good roles that would love to see a CS degree.
I personally think of CS as "paying your dues". You suffer a bit and feel bad about yourself, but you've become an objectively more valuable person because of it, simply because you can program.
So if you face that head-on – talking to a therapist, reading about anti-anxiety strategies, etc – you may find that you are able to perform as a programmer. And even if programming itself isn't your best role – either because it triggers performance anxiety, or just doesn't match what you enjoy doing – addressing the sort of anxious-thoughts-under-pressure you're having will help in any other challenging interview/job role you find.
There are lots of roles in software that aren't constant intense programming, but require some familiarity with software lingo, tradeoffs, processes, etc and may involve small sessions of less-challenging programming. (These can involve various kinds of integration or demo work, project-management, "sales engineering", marketing, and so forth.) And you wouldn't need to "knock-it-out-of-the-park" on interview-style questions to qualify for such jobs – just show some ability to engage and improve.
But you may also have built things up in your mind as being worse than they are, leading to a self-reinforcing cycle of imagined doom.
Do some anti-anxiety research/coping practices. Maybe try to go into some low-value interviews even if you're scared – places you're not keenly interested in – as practice. You might find it's not as bad as you think, or that after a few it's no longer as scary. Consider other entry-level roles at software-type companies that let you learn about the industry and profession without needing to feel fully competent on day one. After you've interacted in a real environment you may find it easy to slide over into some useful closer-to-programming role, without the stressed-out ("PTSD") brain freezes you're facing now.
At some point, I think we need to accept that sometimes other people are not the problem.
1. Explain to yourself how algorithms work, like a teacher teaching his/her students. 2. It's even impossible to explain to yourself when facing some middle-level/hard problems. Then I got another good idea: write everything down on papers. Finally, I found out that it was not that hard to solve these problems.
There are a lot of other learning strategies. In retrospect, I think it's lucky to be an engineer. Although it's hard, tough, brain-racking, I get to know a lot of learning strategies along the road. Sometimes you wonder if others are way smarter than you, but maybe they just know some learning strategies that you don't know, and they never give up.
Dunno if that helps, but I've been programming since 8 years old. When I did college there was definitely a considerable amount of people that I might consider that... they didn't know how to code or to properly solve problems, but that's because they didn't improve their problem solving skills.
If you have no monetary or legal obligations, just stay at your parents place, sit down, create a SPOJ account and go problem by problem until you are confident. If I had quit 2 years off my career to study problem solving now that I am 30, it would rarely make me lose anything, much less in a 30 years of work timeframe.
Go get rid of that anxiety I think you can only solve it by being more confident, and to be confident you need time. It is much easier to be a good guitar player if you start as a kid, but I bet that anybody that dedicate a few years will be able to perform well, peogramming is the same.
Just like how the SAT has little to do with predicting academic performance, this silly little game has little to do with predicting real world programming performance.
It can be a valuable exercise to be exposed to the material, but by no means is it a pre-req for being able to succeed at sw eng. Plenty of people garner the correct resources, study for this and get fancy jobs where they go on to spew out absolute garbage in code form. It is meaningless.
Some companies recognize the folly of this, ask the recruiters.
I feel for you, and I'll try to give you some advice with my "professional programmer"(TM) hat on.
Um, first, I think it would be helpful for you to find a way to ease up on the pressure you're putting yourself under. Maybe that means getting a "good enough" job in the meantime, or just a "regular job" (minimum-wage style), so as to get some immediate cash flow going. If money isn't a stressor for you, maybe just take some down time. (That top comment is top for good reason).
The second bit of advice would be to just actually go do the interviews, whether or not you think you've prepared "enough". You're a fresh college grad, and no-one is going to expect you to have all the answers. Don't worry about fucking up, basically, because of course you're going to. The key is just persistence -- don't let the fucking up get you too down, because you've still got to go to that next interview -- and make sure you learn from your fuck-ups, so you don't keep fucking up in the same way.
I can't tell you how scared I was during some of my first interviews. Reaching out a sweaty hand because I was a bundle of nerves is just one terrible experience. But if I hadn't had that experience ... well, you get the point.
Maybe programming isn't for you, but maybe a job you don't love will pay the bills, and that's okay. Or maybe it's just that leetcode and CTCI aren't for you. I mean, some of this interview stuff is like "security theater" at the airport, only it's "interview theater" at the whiteboard. Ineffectual at best, but demoralizing and humiliating at worst.
Don't let the red-black trees fool you. There is real work to be done!
So basically academic exercises on rote memorizing Math theorems which have no remote influence to real software development.
>>but I’m getting no where. Easy problems take me 2-5 hours.
I know ace developers with several years of experience who would fail at these problems.
>>I experience PTSD like symptoms from the constant barrage of negative thoughts the difficulty and stress of doing these problems are causing me.
Do not waste 2 minutes on this, because those problems are no reflection on your abilities.
---
Please try to understand this. People who invented these algorithms, took years to arrive at working solutions with several years of academic career behind them.
You and I are not going to crack the solutions to these algorithms in hours.
Those who do, build upon memorized patterns. If you consider this algorithm ability you might as well start handing fields medal prize to every joe who has memorized multiplication tables.
I have seen several developers who thought they were awesome because they had a CS degree from a fancy school. They were very wrong.
Programming is a skill. Skills take practice to develop. End of story.
Most people are confused about the nature of education, especially CS students. Education is not trade school. Trade schools exist to get you started on a skill. Education exists to provide beneficial structured knowledge. If you are having trouble figuring this out I wouldn't hire you either.
Now if that doesn't sound like a path you want to go down but you still like programming (even if you don't want to be the one doing the dev work) I'd recommend picking up an MBA or some other administration based masters degree. Seeing as you have respect for the difficulty of programming and have the theoretical knowledge you could be a really fantastic manager and potentially at some point an executive over developers.
the good thing about IT for you in particular is that scripting is so important to it that it might sharpen your programming skills enough to incline you back toward software engineering. sysadmin scripting is obviously less theoretically demanding than most software engineering tasks, but you can get the satisfaction of solving real problems (relatively) quickly using code--and knowing basic CS principles will only help, as long as you're open to learning the practical realities of IT, which often strain to breaking the idealistic assumptions many CS people have about how systems work and where/why they fail.
That may be more a result of how your work history rather than shift in the industry norms.
Aside from that, I have one other piece of advice that you may or may not enjoy hearing:
I would stop—like, right now—even thinking things like "I experience PTSD-like symptoms". (Unless you're dead serious about your symptoms being similar to that of those who really have PTSD, in which case get a real diagnosis from a professional.) There are many reasons for this, two of them being:
1. It's hard enough for professionals to get this stuff right without getting their diagnoses called into question (including by armchair-psychiatrists like us programmers on HN). Heck, people here are even questioning your assessment of the CS question's difficulty. (!) And there's so much context and prior knowledge/experience to evaluating symptoms that's difficult to judge as a layman. Just go on WebMD next time there's a weird pain or tingling or bump somewhere in your body. If your experience is anything like mine, you'll quickly find that you may have anything from M.S. to cancer... when in fact it might be nothing more than a cold (if even that) and it could go away after a while. All you're doing is depressing yourself.
2. The point of identifying any illness is very simple but very critical to keep in mind: to help find you a treatment for current or future symptoms based on the known literature. If you're not doing that, then telling yourself you have—or might have—a disease/disorder isn't doing you any good. Again, you're just depressing yourself. And what's worse is that you're suggesting to yourself that you don't have control over what's happening, when in fact there's quite a good chance you do.
If you like programming itself, don't pull the parachute cord on it just yet. There are plenty of companies that aren't tech companies that need programmers -- maybe that's less pressure mentally and from actual demands from the job? Something to think about, at least.
Also, consider a secondary skill or interest and mull over what kind of company could benefit from the intersection of that and your programming skills. (That's somewhat inspired by this: https://medium.com/the-mission/make-the-pursuit-of-curiosity...)
I am not sure if we have had similar thoughts and feelings. The idea that I am simply not good enough to be a programmer, after trying so hard. And I cant solve these problem quickly enough to be a programmer. I can definitely program, given enough amount of time, but being a professional programmer seems like a different thing. And there seems to be a immense amount of knowledge that I have absolutely no idea, there is more unknown then in the known. How am I suppose to do this day in day out? And it causes anxiety issues? is that similar to how you are felling?
I did Computer Engineering degree, which is different to Computer Science. At the time I have always thought how CS would be a much better degree, but I could not get in due to higher entrance requirement, so instead I got into CE. I dropped into the CS class whenever I can. Reading their teaching materials, I grinned. I remember thinking why do they teach outdated stuff like these. Perl! ( It was on the way out, the future is super hyped thing called Java ). May be because my Collage wasn't all that good in CS ranking. May be that is why. In CE, we actually do lots of what I call real engineering work, with transistor and low level design. Which requires lot of discipline, and rules to follow.
After nearly 20 years. My thoughts are, none of the CS degree preps you for today's working environment. And it never will. It doesn't matter which college you go to, 90% of those work aren't really related. The modern tech teaching is not outdated, it is just the hype cycle moves so fast and tech industry as a whole ( Actually not tech industry, but specially Silicon Valley ) likes reinvent the wheel every few years what was put into text book material are likely outdated.
Most of the best programmer I have met, actually not most, but ALL of them. Are self taught.
And what is funny, ( sorry if this hurt anyone ), most programmer have absolutely No idea what the heck they are doing. They somehow got a pieces of code working, compiled, and it works. Don't ask them why or how or if it is good. At the moment they would have thought those code are good enough, likely 2 years later they thought it was a pile of crap.
Compared to real software engineering, which for example, code used by NASA, or Sqlite, the amount of testing and thoughts required are insane. But those are niche cases in today's market.
Then there is the domain knowledge, ask DHH to explain Linux Kernel to you? He would have said who the fxxk understand this. Algorithm what? Ask Linus to do Web Programming? Who the Fxxk has invented these pile of abstracted mess and trillion of framework just to render a page?
I was the few of the best in class for my programming project. But I never got a programming job, mainly because I had always in my mind, that real programmers were like Swordfish, Matrix, whatever thing that type so fast and could solve a problem instantly. But instead, now I know most programmer just stare at the monitor and does JACK ALL for a whole day.
Programming is 80% Reading + Thinking. Actually I will go on to say 90%. For a 100min of work, you only spend 10 min typing it out. There is actually lot of thinking going on without you realising it, when you have lunch, dinner, sleeping. Your Brian is constantly working in a background thread without you even knowing it.
I wish I had known this at the time. I wish someone could tell me programming is like that. I could happily hack out a solution in my own time and schedule, but I cant think faster and solve a problem in mins.
I had always dream of telling others; the world outside geek circle, how programming really is. I had always wish someone could fund me doing a Mini film, and have it played in all university or programming courses. It will be a documentary of famous programmers every day work and programming. From Facebook, Google, Apple or Microsoft. Having them staring at the monitor, and fast forward showing they did zero typing of code. And has embarrassing question that should know but they don't. How all these programmers are really no different to you.
I know how it feels, programming at your own schedule vs programming at someones else scheduled when you have no idea how long it will take. Would I be fired if I didn't work fast enough?
Programming isn't for everyone. There is a difference between able to write program and likes to write program for a living. And finally you are young! Explore more! Unless you have a burden ( bring money home ), keep looking, don't settle. I didn't understand the explore options when I was young, but once you are in your 30s, your freedom to explore are limited by families, relationship etc.
Good Luck.
Maybe start a Meetup group and work through problems with other people?
Now before presuming you can't handle a workload at a company that isn't all testing-mensa-crazy, you might want to look into how you respond to this stress before evaluating the best course of action.
As other commenters have said, there are many options, but at the root of it you should understand what/why you feel this stress and it would be best to get professional advice on that.
I'm the last person who wants to advocate pharma-everywhere solutions, but I've worked with some extremely talented people who otherwise struggled through life and managed to find the right formula that worked for them.
This is not ridiculously uncommon. I had this problem for awhile too. The only thing that got me through it was applying to every possible place and getting more practice. I know that may not be what you want to hear, I know you've probably already practiced a ton and I know you've probably already applied to a ton of places.
But seriously, practice. Apply everywhere without an expectation of a job immediately. Time yourself and if you can't figure out the problems, it's okay to look. It's fine. At a certain point you'll have just seen the problems before or a variant of them and you'll be able to do them.
https://github.com/poteto/hiring-without-whiteboards
Don't give up so soon. You can do this.
Yes. If you understand basically how computers work and what they are capable of the corporate world will find a use for you. Can you communicate well? Like giving presentations? Try going into sales, project management or documentation. Are you a real people-person? Try going into people management.
These are just general categories. The reality is that the world we've created for ourselves has a tremendous need for people who can be at the edges of complicated technology and act as an interface to some other world. Don't despair.
See https://github.com/icopp/tech-demo-1 and https://icopp.github.io/tech-demo-1 for an example of one I've done before.
I do have depression. Pretty bad one actually. I am just graduating from college at 31 because of the toll depression took on my life. I have no previous work experience because I spent my 20s just being depressed doing nothing basically. I've talked to therapists for years now and it's helped, but I've basically gone as far as that can go. My therapist and I both agree that basically as much as can be done from me through a psych has been done. My life needs to improve. Programming was supposed to be my ticket to a better life.
Some people have mentioned I should move home- My home environment is extremely toxic. I’ve cut off my mother completely because she has a severe, much worse mental illness and I only talk to my dad when I need something because he has quite the temper. I managed to get out of the house only because I’m on disability for my depression. To make things worse, my dad is past retirement age. Every single day I’m not making money forces my dad to prolong his retirement as he is the only one in the family with the mental faculties to maintain a job. It should be easy to imagine how this makes him more irritable and angry while also making me feel incredibly guilty and parasitic. This fragile economic state + my age is why I don't really have time to take it easy. I was supposed to be making money yesterday.
I’ve been preparing for technical interviews for over a year in reality, but intensely in the last month or 2. I couldn’t do Fibonacci recursively up until a few months ago until I looked it up and studied how the recursion was working. This is just one example. There are so many very basic things I can’t do.
Finally, I can’t depend on a network or friends in any form because I have none. I am a complete pariah in the computer science community I come from and every other community I’ve ever tried to integrate myself into, basically. No one will ever refer me to any job because no one likes me and, in the case of programming, everyone knows I suck.
Even if you do the puzzles 3x slower than "average programmer", but you still can do simple ones, you're much better than most of people who just can't solve them at all and won't bother to learn. I don't know what's the job market in US now, but you can probably get a job somewhere in IT to pay your bills (maybe try QA if you get no luck in dev). I mean, you got a CS degree, this already puts you in better position than many other IT job seekers.
This may be true however. It is more likely they are not sure of your capabilities. A recommendation for a programming job is basically a sure thing job placement now days. However if someone recommends you and you are a screw up it affects their professional reputation. I would focus more on finding a technology you are genuinely interested in so you can "shop talk" with some other people in the industry while proving you know what you are talking about.
In programming almost no one cares about your personality (unless volatile). I have a programmer my team that I sat next to for 3 years and I think we have had maybe 5 minutes of non work related conversation during that time. He just hates talking to people period.
There's a paper by Phillip Guo about conversational programmers. These are people who do not program, but seek to learn programming so that they can be better at some non-programming task.
He's got three papers one this topic, but you're most interested in this one: http://pgbovine.net/publications/conversational-programmers-...
Particularly look at table 2, which is a summary of the motives of conversational programmers.
As whack suggested - try relaxing a bit and giving yourself a break for a week or so. You will be surprised at how effective breaks are in improving performance. This is one of the most common mistakes junior programmers do - no breaks and constant coding until you get burnt out.
I am writing a book on using mindfulness to become a better software engineer - https://leanpub.com/selfdebug/ - you can download it for free and see if it helps.
There's a book called How to Keep People From Pushing Your Buttons by Albert Ellis (https://www.amazon.com/dp/B01DRXBJS8), who pioneered an early form of CBT (cognitive behavior therapy).
I would strongly recommend it as thoughtful reading material with the purpose of getting out of this negative loop so that programming isn't so stressful.
First, I would forget about interview-prep.
Second, I would try to get better idea about actual work, call friends from university that already work, and talk to them. I did learn this way that the day-to-day work in i.e. big corporations in a well run department is not really stressful, especially compared to a white-board interview. Some friend might even have an opening. Going through a referal is much better than just applying.
If you don't have friends with jobs already go ask on twitter. I think people around i.e. @sehurlburt form quite a friendly developer community and Stephanie herself often retweets i.e junior CVs.
Third, I'd figure out what position suits me. I would do this after I have realistic expectations about my work-environment. If programming itself is that stressful, I would probably advise-against doing ops-work, because baby-sitting servers can be even more stressful. But there are many positions that might fit you.
Manager - even though in many corps, people view getting to management as a promotion, there actually are junior managment position. Requires mostly people and organizational skills. Having a CS degree should help you stand apart.
Technical writer - mostly means writing documentation. If you have good writing ability, having a CS degree should be a plus.
QA - mostly software testing. Skill requirements can vastly differ, i.e. my boss expects me to be a decent coder, with some ops-experience. A friend of mine has 101 Javascript under his belt and in different corp mostly produces test-case documents in Word, another friend mostly clicks through a web portal based on a giant checklist. All of us have the title QA in their org.
You still might want to be a programmer. There are many levels of skill/stress/benefit ratios available.
If getting a job over a beer/coffer with a friend whose department/company has open position is not an option, I would go to a job-fair, or if I'd have a company I actually like, I'd wait for when they have an open-house, or something like that. I would talk to a recruiter there. That is how I got a job at RedHat as a QA more or less :-)
If you are sure you don’t want to be a programmer, then don’t be one.
Your degree shouldn’t pigeonhole you. If you are a recent graduate, you have plenty of eggs for whichever basket you choose.
Edit: what about data science? There are plenty of jobs available. Some might be based on coding, but others are based on maths, and others based on having a good business sense. It’s a diverse field which is in vogue and could allow you to pivot your career.
You shouldn't feel bad or try to apologize or try to "make it work" - those are all wastes of time. Get on with life, and find something you have the opportunity to excel at! Being stuck behind a glowing screen 8+ hours a day isn't ultimately rewarding or really sustainable - so find a way to make software-fiddling work for you, or get out now!
Some questions to think about - are you good with people and can you do well in a customer facing role? If not perhaps some of the more individual roles would be better.
But I would suggest a therapist. Probably grad school to get more experience is not warranted until you know if you want to stay w cs, but something where you can get more confidence like an internship.
I also know others who mixed it with some short courses on stats or other things to diversify into data science, marketing, business analysis and other areas.
Don't sit around and say, "Where can I go from here?". No matter where you are, figure out where you want to go. And 9 times out of 10, the skills you have accrued in your life will be of some value. That is my experience, anyways.
Find a good tutor who understands this issue and knows how to help.
I've helped multiple students level up in math by getting past this kind of anxiety.
The book Misteaks... and how to find them before the teacher does is about calculus, but hopefully it'll be obvious how to generalize it to your situation.
- scrum master roles, where you are managing agile teams
- sales engineering, helping sell technical products
- solution engineering , helping implement a company’s product, little coding and configuration
- training and teaching schools
- management and business, start as business analyst, get an mba and run a busines
What I didn't like about being a real career programmer was the time stress, the expectation that you'll write code that works, and especially having to write code for someone else, where you're trying to translate their ideas and trying to do so correctly with limited information.
Contributing to open source sometimes (in my experience) embodies all of these in one. I've found a lot of really helpful open source projects where this isn't the case and everyone is nice and helpful, but you'll also find some times where the maintainer is mean, doesn't like your code, your code doesn't fit their style, and they're going to make sure you understand that. And if you spend your time writing good code, then do a pull request just to find out someone had already beaten you to it? Oh god... I'm stressing just writing this out.
Even if it's just 5% of the projects that are like this, to someone who already has crippling anxiety about their skills as a programmer, being put under public scrutiny is unthinkable. One bad experience and you might be gone forever.
What actually helped me was getting a job in another field and finding ways to write bash scripts or python scripts to help, with each script increasing in complexity until I had hundreds of small programs that I designed and wrote and improved over time. Zero stress, zero expectation, but when they work it feels amazing and is a great boost in confidence.
1. in an interview, whether you solve the problem is less important than demonstrating how you approach solving problems. think about it like being asked to find a needle in a haystack.
2. don't think you have to score a job at a Google right out of school. there are lots of opportunities in less stressful environments.
ok I lied, I have more advice...
3. as an alternative, write good quality useful software and post it to a hit repos, go answer questions on stack overflow, demonstrate your knowledge and abilities. become an expert in some area that interests you.
4. maybe you don't want to be a programmer. that's ok. your background will still give you an edge. I have a colleague that worked for a couple years as programmer and ditched it for PhD program in neuroscience (not thAt that is any less stressful).
5. consider getting professional career advice and coaching.
6. consider getting help for your anxiety. worrying whether your smart enough or how hard the problem is will keep you from actually problem solving.
So, with that logic; perhaps you should try your hand at teaching music.
Though I didn't get into "software engineering". I'm a frontend/backend developer. How narrow are your sights set? The CS field is pretty big.
I’m making a six figure salary writing chef cookbooks and cloudformation templates and I don’t even have a degree.
Just slow your roll, dial back your expectations and apply for less high pressure jobs, man.
Nil desperandum!
Having said that, my first sentence is still valid. Programming isn't for everyone. If you don't enjoy it and you don't want to do it, you don't have to do it. First, don't constrain yourself with your CS degree. If you don't want to do that kind of work, then don't do it. There is an entire world out there. Yes, you've spent 4 years and a metric tonne of cash, but that's a sunk cost. Do what you want to do.
I will have to say that as someone who has mentored a fair number of people in your situation, I can guess your next statement. "But the thing is, I don't know what I want to do. I don't really want to do anything." If I'm wrong, then I'm happy because you can just ignore this next part and get on with your life. If I'm right it's only because it's stupidly common.
Here's the thing. If you don't know what you want to do, then don't stress about it. You can be a programmer for a while and suck at it. In fact, you might as well. Just give yourself permission to suck. It's OK. It's just the time you are taking to find out what you really want to do. I mean, you can work at Taco Bell instead if you want and I won't think any less of you. But programming pays more and you did already pay that metric tonne of cash for the degree. Might as well take it out for a spin around the block.
But if you are afraid that you can't get a programming job, or if you kind of like the technology sector, but want to do something else, you are in luck. There are lots of jobs. I'll list many, but there are many more if you look.
QA -- there are less of these jobs around because it is not as popular an activity as it once was, but you can still find it. Best to look at older, established large software companies.
Sales, pre-sales and sales engineering. A friend of mine gave up being a programmer and got into sales. But he sucked as a sales person. Luckily, his manager noted how good he was at explaining the technology to the customers and he was moved into sales engineering. The cool thing about sales is that you can get a job anywhere and get experience. Expect your ass to be fired about a billion times before you get good at it though. Luckily nobody cares if you were fired as a sales person.
Support and/or technical (or even non-technical) documentation. Maybe you aren't good with solving logic issues, but you are good at explaining stuff. Then this is a good bet. I have a friend who moved from programming to technical documentation basically because he was forced into it (they were desperate for people who understood the system to write docs). Eventually he grew to love it and is now in super high demand.
Project management, etc. It helps to spend a few years as a programmer before you move into this field. It doesn't matter if you are the worst coder on earth before you move. If you write on your CV, "I've been a programmer for the last 3 or 4 years, but I really want to get into project management", you may have to take measures to protect your physical safety as people rush to grab you (programmers, as a rule, do not want to do this job, but their experience is necessary).
System administration. This is really a special skill (well, not unlike everything else I've mentioned). It takes a particular mindset to be a good sysadmin. You need to be a self starter and self reliant. However, the job is more about handling the complexity of the systems than handling the complexity of code bases. It's also got a lot more short term stress as opposed to long term stress -- it's better for some kinds of people. These days you can run the gamut of some guy who pulls wires through buildings all day, to guys who administer networks, to operations specialist all the way to dev ops. Sorry if I'm pidgeon-holing some of this stuff -- I don't want to imply that these jobs are equivalent or even similar. It's just that I don't have infinite space to write about it.
One last anecdote. I had a friend who got a degree in CS at a bad time. He couldn't get a job to save his life. He ended up working as a janitor at a local high school. Whenever there were problems with the computers, he would wander in and fix them. The school made him their full time sysadmin and eventually he worked his way up to be in charge of the computer labs for the whole school board (after which I lost track of him).
Your path in life is not fixed. You can tread any path you wish to tread. I know it is insanely stressful (for some bizarre reason, I tried to be a theoretical physicist at one time in my life -- didn't last long...) As the saying goes, the journey of a thousand miles starts with a single step. But, there is another less well known part of that saying: Which of the steps is the most important? The first? The last? Some innocuous step in the middle? Even if you don't know it, the small things you do in life are just as important as the ones that stick out in your memory.
Good luck!
As someone without a CS degree but 3+ years of software experience (and a non-STEM Bachelor's), how do I go about doing this? I feel like I would need to go somewhere that would train me on project management, and I don't see job positions like that. It seems like PMs are promoted from within or hired with prior experience. As crazy as it sounds, I think I would enjoy PM work.
I hadnt done it before but its actually easier than i thought it would be, really its just alot communication and coordination on slack
If you already have project managers in your company, I would get friendly with one or two and tell them that you are interested in learning how to do the job. If you work with one in particular on your team, then ask them if you can sit in on stake holder meetings (with your manager's approval of course!), etc.
If that avenue is impossible, then I would try to find a recruiter you can trust and say that you are looking for a job where you can transition to that kind of role. Recruiters are often looking for that kind of person. Experienced project managers are often quite expensive. It can be a bit of a gamble when you are hiring them because the job is quite difficult and skill levels are pretty variable. If you can imagine the impact of a developer that has a bad attitude, now imagine the impact of a project manager with a bad attitude :-) One of the cool things about the role is that you can have a kind of multiplier effect -- but that effect can be fairly destructive if there is a problem.
Anyway, I've definitely worked in groups where we were begging recruiters to find someone who could start as a developer and then transition into a project manager... Never even got a single person to interview :-).
As far as training is concerned, it's probably not going to be possible. In the ideal world, organisations would know what they needed and be able to train up people to fulfil that role. In the case of project managers, usually they just wing it :-) (As a sidebar, the absolute best project managers I've worked with were either trained as building architects, or worked their way up from being a personal assistant -- so you can get an idea of the kinds of skills you need).
Again, if you don't feel confident in doing the role right away, I would inflict yourself on your current team and experiment :-) There is just so much work to be done all the time on gathering requirements, understanding acceptance criteria (and documenting it), writing up notes for the "big picture", making charts to help people understand progress, communicating with stake holders (even if it's just walking up to them and being friendly, so that there is as to build up a good rapport), etc. If I was on a team that didn't welcome some help in that department, I would start looking for another situation anyway. As is often the case, you may have to put in a few hours of overtime here and there so that you have time for the extra work, but eventually people will start to depend on you and you can easily justify it in your normal day job.
Congrats. You're a Programmer. (And probably in the top 10% of all "computer geeks" everywhere). Someone wants to hire you.
> I put all my eggs in the “being a programmer” basket and it’s clearly not for me.
are you judging based on your performance on these coding tests or on your enjoyment of the work of programming. If you genuinely enjoy coding/are interested by it then maybe it is for you.
Business analysts, project management, tech sales, testing, support, etc
Choose an industry-focused company (banks, oil & gas, telecommunications) instead of a tech-based company.
Good luck with your career, whatever you decide!
I’m a terrible programmer but it never bothered me because my degree is in neurobiology: just avoiding a segfault was already a success for me (when I started).
Also, don’t go it alone. Get a mentor, attend meetups, find peers to practice with.
If you really like programming, you should continue.
- systems adminstration
- network engineering
- Incident response
- Technical sales
- Account management
- Intellectual property law
- hardware engineering
- project management
- product management
- IT support
- IT security
- technical auditing
- data analytics
- computational biology
It is possible that you are overestimating what's required and underestimating your own ability.
This is a path that I took.
I'd chime in to say take it easy. Remember: interview problems are very, very far removed from actual, day-to-day software engineering work.
I also recently graduated (master CS). But I am having strong second guesses whether CS is the right career for me. The only reason it would be the right career for me is because I love thinking in steps, which is what programming really is (procedural programming anyway). I also love debuggers (more steps!) and am full of wonder when my little step by step world gets shaken up by concurrent programming.
However, I don't care that much about creating things. I created a website here and there and one or two small web apps but that's it. I don't care about the mechanics of programming (other than it being step by step). I don't care about learning new semantics, or frameworks. I don't care about MVC. And I hate it how programming changes my personality. If I program 8 hours per day, I only care about truth and don't understand humor. Contrast that when I party all week long (did that when I was younger) and truth is still quite cool and I understand humor and can bring the laughs to other people :D Because of all of this I really am on the fence whether I should become a programmer, I could, but should I?
In order to find this out I am on a month long journey. The journey is slowly but surely beginning to complete. In this journey I decided that in order to formulate the best career plan I can possibly have I need information from three sources:
1. I need to read the profiles of all my LinkedIn connections. My LinkedIn connections show all kinds of profiles and more or less show how they got to where they are now. To me it showed what's feasible, and I'm a bit lucky that most of my LinkedIn connections are 2 years further than I am (I studied more degrees).
2. Read all interesting stories on Indie Hackers. I read 39 interviews that I believed to be really valuable.
3. Do the career guide on 80000hours.org. This career guide made me realize a couple of things.
I now have a list of 46 jobs. Half of them are in things that I feel are pretty obvious choices for me. The other half are more creative (I even have deadbeat in there as the most creative 'job'). I intend to write a blog post on mettamage.com about my whole journey, but for now I'll just leave you with the 46 jobs that I found that might interest me and also the 11 or 12 (lost count) constraints that I believe to be important for getting a job. I hope that my process (scouring LinkedIn connections, Indie Hackers and 80000hours.org) will be helpful. The jobs happen to be ranked on what I now currently think is most suitable to me (except for sales engineer, just added it recently). I do think I still need to inject a little dose of realism into my thinking, but I hope it helps. Also, options are definitely out (e.g. blackhat hacker) but evaluating them may show what you find important.
== JOB TITLES ==
1. Playable post writer
2. Bar/Hotel in Thailand (project already underway)
3. Writer
4. Music Producer
5. Gamification expert
6. Negotiation coach
7. Writing children's books
8. Buyer and seller (ebay)
9. Caring for kids (husband)
10. Freelance HW
11. Tech Freelancer
12. Hacker (blackhat)
13. Dating Coach
14. Bootcamp Instructor
15. Work for a green tea company
16. PhD Student (psychology or computer science)
17. Pentester
18. Virtual Assistant
19. Trader (stocks)
20. Trying to be like Casanova / James Bond (seducing people while influencing government officials)
21. Deadbeat
22. Real Estate Agent
23. Workshop Instructor
24. Serious game designer
25. Behavioral Informatics Dev
26. Entrepreneur (laadpalen)
27. Something with finance
28. Front-end Web Dev
29. Teacher (as employee)
30. Computers & old people
31. Entrepreneur
32. Full-stack Web Dev
33. Data Scientist
34. Marketing
35. SEO Specialist
36. UX Designer
37. Sales
38. Consultant (tech)
39. Tutor
40. Growth Hacker
41. Machinist (employee)
42. Bartender (employee)
43. Cleaner (employee)
44. Bus driver (employee)
The following 2 are not rated
45. Rhetoric (blogging)
46. Sales engineering
== FACTORS I FIND IMPORTANT == Flexibility - time (e.g. 4 days per week)
Flexibility - amount of work (e.g. not everything planned has to be done on the same day per se)
Flexibility (travel/remote)
High Autonomy (freedom in what you do)
Pay
Meaningfulness (e.g. meaningful for yourself or society)
Ability to learn new Skills
Quality of training
Sleep (I have insomnia issues, so I need to know how bad sleep issues will be)
Perceived fun
Social capital (connections are everything)
Amazing colleagues
Cognitively Challenging
Emotionally Challenging (this is a negative for me)
Shapes you into an interesting personality (doing sales would make me more chatty, if I only program I become a humorless person who only cares about scientific-truth, not so fun at cocktail parties)
Risk (high-risk, high reward)
== FUTURE STEPS ==
My goal is to find out more about income opportunities of the more risky things I have. Most if not all of my future steps involve talking to people.
(1) I think I should have a conversation with Nicky Case how I could leverage playable posts into a career. At the very least I could work with him on something. (2) I think I should email Bart Hufen about becoming a gamification expert. And also ask him how to deal with associated risk. (3) I should find out if negotiation coach is actually a thing and do more research on it. (4) I should find a pentester and invite him/her for coffee. I suppose Guillaume is a good person to ask! (5) I need to find a couple of people who are able to tell me about the pro's and cons of freelancing and to what extent a normal job will help. (6) Look more into becoming a virtual assistant. (7) I think I should research more into becoming a serious game designer/developer. (8) I should look for role models / people who I feel are like me. (9) I want to know more about growth hacking. (10 optional) Find out if your love/hate for CS is justified by talking to people like me.
== THINGS I WANT IN MY FUTURE JOB ==
1. Thinking in steps or in processes, sans the frustration
2. Immersive-like experiences (e.g. storytelling)
3. Highly challenging and seeminlgy improbable to even impossible projects
4. A small bit of applied math/arithmetic (e.g. what I experience with professional poker)
5. A touch of playfulness
6. A sense of altruism
For me its anything dealing with automation or building things to automate things. Doesnt matter what the job is bc if it doesnt fulfill me so long as hours are okay i can do side projects
DevOps Data Engineering Product Management Project Management Agile Coach
Seriously. I think that you are just doing the wrong interviews. Applying for the next wanna-be-like Google company that asks for stupid riddles (yes, they are damn stupid - and I hate them, because they are totally unrealistic, disconnected from reality, and with a lot of pre-assumptions that in reality never happen) and "how to find the n-th element in a non-sorted set considering that there is a rat jumping up and down every 30 seconds and this has an impact on how the numbers are stored, ... in time O(logN) with space O(1) etc" doesn't say about you or your abilities.
Nothing. At. All!
It only says that you didn't prepare well for that sort of exercises. Can you do better? Maybe, if you [still] find the fun in it, which you don't and it seems you never did. So ditch it! That's not what you wanna do now! You know what you can do? Apply for a job. They ask you to do the codility test? Just ditch them. Don't take s* from anyone that doesn't value you as a human being. A machine can't assess how good you are. Yet. Maybe in 50 years. Not today.
Right now you need to regain trust in yourself, and in order to do so, you might wanna try to start with a company that doesn't ask you to do these shy tests. I saw that some comments here mentioned a github link with some companies not following such madness. Take a look at them. And remember the rule: DON'T even think about starting the online test if all they ask is a riddle. If they are CS questions, why not. If it's a riddle, stop it right away and maybe even tell the company that you won't do it and why - they might want your feedback. Again, this is entirely up to you.
I want you to repeat it in your mind until nausea: these tests don't say anything about yourself! They only say how bad the company is, as they don't value anything else but your ability to solve riddles that they find "smart". So, the question is: do you want to interview with someone that sees the real s that you can do and that you can offer, or someone that likes to assess how good you are with their interviewing process?
Remember: interviewing is broken. Nobody has yet found a way to assess how really good someone is.
Everyone will tell you "oh but you need to know the basics of CS". All it takes is to learn algorithms and data structures then? That's it? Studying a couple of books? That's all CS is about? And that's all an software engineering job is about? I didn't know that. All I know is that it's inconsistent with the large amount of exams I had to take to get my CS degree. Not 1, not 2. Many!
And the funny thing? They even ask "behavioral" questions, thinking they can spot liars or "culturally unfit people", if you are lucky enough to pass the stupid online riddles. You know how easy it is to fake answers to show that you are such a great team player? Or that you are an ambitious person? Unless you have a psychologist with two big balls during the interviews, and even then, you might find the psychopath that knows how to fake answers. That most of the times become managers. Top level ones.
Seriously - don't feel bad. You achieved a lot, you got your damn degree. Don't let these poor people ruin your life - yes, for me they are poor people, and no, I am not sorry. They just don't know how to interview, but as they are big names, or follow the methods dictated by the big names, they feel they are doing the right thing.
Google admitted many times that their interviewing methods are doomed. It's nice to find that type of guy. It's to create a niche of people that feel intelligent, that need to feel smart, that need to have something in common. It creates equality inside the company, because everyone had to go through the same sh, so nobody questions "how come that this guy got hired?". It's a pool of prepackaged types. I hope you don't wanna be one of them, do you?
I spent 2 years in college studying CS before I couldn't continue. I had just started getting into harder courses using primarily assembly and my interest faded quick. I had this incorrect assumption that developers lived in terribly small cubicles and it didn't interest me much. I had also quickly burnt out, having a job at 40+ hours a week for an ISP and going to school full time in addition was unattainable. Networking and systems seemed to be more interesting at the time and I took a 10 year detour in IT.
In my IT tenure I slowly developed programs to solve business needs, starting with batch scripts and working my way up to very simple automation tools. Somewhere along the way I no longer cared about the work conditions a developer, doing the work was just too fun and I gained an immense sense of accomplishment when my creations were being utilized. Fast forward to getting my first full time developer-only position as a C#/.NET developer doing primarily Windows apps 8 years ago to now being a full stack web developer. It took being paid solely as a developer before I really felt like one and it took until probably 2-3 years ago before the imposter syndrome started to completely wear off. Where I may lack in algorithm knowledge I make up for it in understanding devops topics to have a more complete understanding of the full technology stack running the web apps I have a hand in. I believe every developer could benefit from a little operational knowledge as it usually makes debugging esoteric issues with a technology platform easier.
I'd describe my capabilities as more of an integrator. I used to write every library I used but I find other developers often have more complete solutions I could bastardize into something to fit a specific use case. While the puzzles I work with primarily involve fitting packages together into solutions, the end result still involves all of the same developer workflow of debugging and automated testing. I'm not incapable of algorithm knowledge, it just bores the ever living fuck out of me. I'm extremely fulfilled in spite of having some less than enjoyable positions, so hopefully you don't let this period try to define your future. There's an amazing breadth to this field to the point of easily having analysis paralysis.
Other comments give good alternatives but there are companies all over the planet paying great money for CRUD/LoB apps solving all sorts of interesting problems. There's also an amazing breadth of jobs for people with the knowledge of computing that comes from a CS degree if being a developer really isn't for you. You don't have to be in a wildly different industry but something else may involve solving interesting problems that keep you more engaged.
It would be even better if you could find someone who is a programmer / developer in a day-to-day business who could talk to you regularly about it and maybe help you out / support you.
It sounds like you're having trouble getting started in this career. Trying to get a first job in this area out of school can definitely be difficult, competitive, tiring and/or scary. It's perfectly normal to feel those things, I think (I know that I have). One can believe that, should you choose to continue down this path, when you find the right place, you'll know it because they'll give you a chance and support you.
Perhaps you could seek out an internship first - try to find somewhere with less pressure for success and more room to grow - if you can afford it. You have one thing going for you that I didn't have - a CS degree (my story is a different one though and I wanted this reply to be about helping you).
You don't have to be a perfect l33t coder on day one. You will find that, programming problems can be vexing headaches like you describe - and not being able to solve them can be extremely frustrating. If you chose to keep going down this path, you might come to learn that this is more normal than not, and as you gain experience - when you hit those brick walls, you learn to go around, or under them. Or you might work really hard and break the brick walls down. Or you might invent a new kind of concrete and realize you don't need brick. I'm not waxing metaphors, I am serious and I'd ask other developers to chime in here if their experience matches this. Eventually, honing this skill actually becomes a reward - but it certainly takes honing and practice and time.
By the way, graduating with a CS degree is no mean feat, so congratulations for being capable of doing that!
I hear you asking about other career paths. I can't answer that question immediately, but, some others on this thread have suggested there are a lot of tangential jobs - like project management, product management, really, there are a great many number of possibilities. Within information systems and technology, you can be a database engineer/developer and work with ETL, data and SQL. You could become an system infrastructure person, for example - doing cloud architecture with AWS/Azure/GCE/etc. or even managing physical hardware. You could work in IT support. You could work in technical sales or solutions. Those are all possibilities that are maybe less hard programming intensive. Perhaps there are too many possibilities without some direction / feedback from you about what you like.
It is entirely possible that you may want to do something other than programming or technical in nature too. What are your interests? For example, some people who thought they would enjoy programming, really end up enjoying cooking and might work towards becoming a chef. You can spend a little time exploring what other options you might find exciting or interesting, and then write down pros and cons / compare and contrast for those things and for working in some sort of programming capacity. Don't give up immediately, but don't necessarily settle if something else really calls out to you.
You also just went through a lot working finishing school and graduating. Maybe you're a bit tired - and need a break (top rated post by whack suggests something similar). That's a great recommendation. It's hard after going through something difficult and stressful to jump right into another similar thing. Don't take a break for too long, but be willing to take a break. We all need them from time to time.
You can think of the kind of skills you gained programming in college - focus on the skills not the programming - problem solving, critical thinking, creativity, being analytical, etc. and see what other careers or vocations need similar skills.
Another final thought - find some places that you can interview without caring about the outcome, but rather simply to gain experience interviewing and see how it goes. Find something that interests you, but isn't necessarily good or bad if you were to get or not get the position. Try to interview, even for a job you might not want but is at least involving programming - if you don't feel comfortable or they give you some horrible programming task, you don't have to finish the interview. Find a way to turn this into an experiment.
You could think of it this like a minimum viable product for a startup, where you are the product, and the goal is to see how you fit in the market. Be willing to experiment, make hypotheses, and try them out. Be willing to fail and learn and take opportunities to grow too. And remember, the difference between science and screwing around is writing it down!
Best of luck to you. You have already shown you care by asking questions - so keep up the good work. Ask more if you think this is helping!
He then told a story of one of his biology students. He said that one of his students came to him after failing a test, and said he studied for many hours before the test and was asking for his score to be improved. My drum line coach then said he told the student that he wouldn’t raise the grade, but instead in my own opinion decided to teach him a valuable life lesson. He said to the student you need to be studying smart and not hard. He then told our drum line that we need to do the same with our practices.
I bring up this story not to say you’re not working hard. I believe you have met that criteria. Maybe though you are not doing things as efficiently as you would be able to if you had the right resources.
Also, with all that said in my opinion a lot of day to day software engineering is different than competitive programming like interview questions. I wouldn’t be too stressed not being good at the interview questions, because it’s so different. I also wouldn't be stressed that you don't enjoy it. Although since it’s a good idea to have a job you may need to meet these somewhat odd demands of getting a software job.
I took a class that was primarily focused on solving problems like these, and I had at least one classmate that was discouraged because he felt not much progress was being made solving random problems. Well if you solve enough of these problems you soon seem to find out that a lot of them are very similar. A lot of them fit into just a few relatively small categories. That’s why it may be easier to see the categories as well as solve random problems. That way you can be picky about which problems you solve and choose to strengthen your skills on problems you have less experience with (another principle I learned from a music teacher).
There is one book that does this really well. It is “The Competitive Programmer’s Handbook” [0]. The only gripe I have with this book is I wish it had example problems to go along with the theoretical aspect of each of the categories. Also I would recommend the "Cracking the Coding Interview" HackerRank challenges [1] which are written and compiled by Gayle Laakmann McDowell (who is the author of the book with the same title as the course.) I recommend watching the videos that go along with each section.
Also just a tip for interviews it’s very good to think out loud and converse with your interviewer. Also remember they are not just testing your ability to answer problems, but also testing how well you would fit within their existing teams (personality wise and such), and they’re testing how you cope with failure. So try and destress before an interview, and try being humble and kind (in my opinion that’s a good thing for teams of software developers to do).
Hopefully you find this helpful, and take this as you will. You honestly have the best knowledge of where you are at in handling this.
[0]: https://cses.fi/book/index.html
[1]: https://www.hackerrank.com/domains/tutorials/cracking-the-co...
Most of what I do as a software engineer is not particularly complicated; it's playing with Legos or akin to construction tradework. I've got to have attention to detail, and a mental map of how the piece fits into the whole, but it's not super clever or complicated. And I try my damndest to avoid things that are clever or complex, because they're usually far too easy to get wrong, and create too much work for future-me down the road. A startling percentage of my time is just doing variations on database crud operations and munging data from one source through some transformations and pushing it at some destination.
Have you thought about going into CS research or academia?
CS is not about programming. One of the best CS professors I've had barely knew how to type.
CS is more about math and algorithms and theory than programming.
There is also technical writing or teaching. High schools are desperate for CS teachers.