in no way was this your fault.
Hell this shit happened at amazon before-
https://aws.amazon.com/message/680587/
Last I remember- guy is still there. Very similar situation.
This company didn't back up their databases? They suck at life.
Legal my ass- they failed to implement any best practice.
I agree completely. If the OP of that post actually did what they claimed they did it was highly unethical and they wasted the time of a lot of people who are skilled, educated, and experienced. They took vast amounts of highly sensitive personal data that was given to them under false pretenses. If anyone here has ever criticized Google or Facebook about how they collect people's personal information their jaws should be on the ground at what that person did.
Secondly, there's absolutely no guarantee that the person is telling the truth. About any of it. They could be lying about having done it at all. They could have done the experiment and made up the data to try to discourage their competition. The experiment could be legit, the data could be legit, and the person could be well meaning, but their interpretation of the data could be way off. The person could just be lying about everything and trolling this sub, which is filled to the brim with high-strung, cynical people anxious about their futures who are ready to believe anything.
This is why science is done the way it's done. No one is beholden to the word of a single person. All that person has done is spread a bunch of fear, uncertainty, and despair in a community that is at its best when it's doing the opposite.
EDIT: Check out the Stack Overflow 2017 Developer's survey for a real substantive look at what you're up against as a prospective employee. Important takeaway: only 13.9% of developers found their job through a general-purpose job board (e.g. Indeed).
First bit of advice would be to put something up on the internet ASAP, and then iterate on it. It’s easy to overthink a portfolio website, become insecure about it, and never upload anything.
For example, mine is www.aria.ai. It’s nothing crazy, but it serves its purpose. Also Netlify is great for hosting, and I recommend them over pretty much everything else. You get a free CDN, free SSL, GitHub integration, and more stuff I don’t really use.
https://www.amazon.com/Managers-Path-Leaders-Navigating-Growth/dp/1491973897
Haven't read it myself yet, but heard it recommended a lot.
Home improvement projects, mostly. Occasionally hiking/fishing/camping but that's becoming more difficult. Really hoping my LGS starts doing FNM again now that COVID restrictions are lifted, but I'm not holding my breath.
Used to be gaming (HoTS and WoW mostly) but anything competitive is hard when you have a 2 month old that can exist as a surprise mid-game halting function. Also WoW is hot garbage now. Working through a "retro game" backlog starting with FF9 since that's pretty easy to pick up and put down. Also I can play it on my couch while holding muh sleepy baby.
I've been chipping away at Learning Go as well. Trying to remain reasonably technical as a manager.
The recent Stack Overflow developer survey found that 72% of respondents identified themselves as web developers. It could be that the audience of SO is skewed towards web developers, or it could mean that "web developer" is now a largely meaningless term, because its hard to develop software these days and not feel the need to have it connected to the internet somehow.
in any case I think that web development is a sufficiently diverse field that it makes no sense to avoid it altogether, nor does it make any sense to look down on it or indeed anything else someone decides to do for a living (unless they're monumentally shit at it)
Okay but to be slightly more honest I still focused 80% on coding before the amazon interview. I just made sure to talk about my achievements and passions, and not just laser in on the coding problem. I didn't have a perfect interview coding-wise, and still got hired. I also highly recommend Effective Java, great book.
"Clean Code". Your future self will thank me later. Honestly I had learned such bad practices in college when it comes to structuring code, methods, classes, etc. People will always love to debate which style is "good" but you can't go wrong with starting from this book's tips and then branching into your own comfort zone someday.
Many of my CS courses required me to use linux. It worked wonders at getting me comfortable using the shell/terminal/cmd-line. If I were you, I would install VirtualBox; and even better, if you are in college, your university may have a deal with MS to get you VMWare Workstation. I prefer VMWare, but OracleBox was just as good. Have fun!
Introduction To Algorithms is kind of the gold standard. It's heavily detailed, well written, and I'm pretty sure they put the word "Introduction" in there as a joke(it's 1292 pages).
Your boss sounds like a dick who ruined your self-confidence. Just because you failed at this job is no reason to give up a career. Lots of us have struggled along the way and there are a myriad of factors that contribute to failure. What I'm getting at is, your programming skills might be weak or you might find that the last environment was kryptonite to your brain. I know one thing for sure, telling a person everyday they can't succeed is a pretty good way to program them for failure.
What's not a bad thing here is that your ego is out of the way. You have a real chance to focus on personal growth by examining how you can improve from here. Failure is an excellent catalyst for change.
Getting a job is probably going to be the first step. Maybe you could narrow your search? Focus on companies looking for people strong in the language you know best, work through algorithms and problems, and doing some personal projects.
With regard to personal projects, I think you can learn a lot from them, if they are significantly complicated enough to force you to do some real problem solving, algorithmic thinking, and debugging. I'm fond of mazes (both generating and solving). I think Sudoku solvers are also a popular and challenging thing to implement. Or a Rubik's cube solver. Something that excites you that's going to take some interaction, planning, and iteration to develop.
It might be the case that your architectural thinking is what needs some focus. You get "coding", but from what you've said it's how all the coded pieces work together that's confusing you. That is design, not programming. For example if I said this is a publish/subscribe system would you understand what that? In any case, there are some great resources out there that can help with this (Object Oriented Design Patterns and Code Complete are two popular and good resources).
The first bullet point about your long responses is an immediate issue that I can see — a lot of people talk too much and lose the interviewer’s interest. You have to keep responses brief and directly on point. Rambling for too long can be detrimental to how they perceive you.
A soft skills book I found helpful on that subject is called “60 seconds and you’re hired”, which talks about how to build these quick pitches and responses to common interview questions to keep your interviewer engaged. You prepare and then literally practice those responses. When the time comes to respond to those types of questions in a live interview, you sound much more confident as a potential hire. Hope that helps.
Book link: https://www.amazon.com/60-Seconds-Youre-Hired-Revised-ebook/dp/B00XIYG6US/
What can I say? It's just plain ridiculous. I am looking for a change right now with decent experience under my belt but I have to take out my data structure and algorithm notes and start all over again. I cannot imagine what it must be for your level of experience. There was a similar discussion on hacker news about this after a guy that developed HomeBrew was asked to invert binary trees in a google interview : https://news.ycombinator.com/item?id=9695102
Honestly, look at candidate's resume for God's sake and use your common sense and ask relevant questions. We use agile methods in our engineering but there's zero agility here and such stupidity is allowed when it comes to interviews, it boggles my mind.
I'm in the same boat as you, I had a very bad algo professor and I feel like I really missed out on some important topics. Luckily for us both of courseras algorithm courses are starting/have started. https://www.coursera.org/course/algs4partI is Princetons course, which has a focus on implementation as opposed to theory (everything is done in Java). https://www.coursera.org/course/algo is Stanfords course which is more about analysis. I plan on doing both, I've finished the first week of Princetons course I have to say I really enjoy it so far.
I am an entry programmer, but here is some suggestions that have helped me:
Its in the comment section of that list. https://www.freecodecamp.org/news/coding-interviews-for-dummies-5e048933b82b/
Not exactly computer science but I'd recommend Godel, Escher, Bach (one of my favorite books). I've enjoyed K&R's The C Programming Language due to how concise it is as well as The Pragmatic Programmer.
Here's a great list of a bunch more https://stackoverflow.com/questions/1711/what-is-the-single-most-influential-book-every-programmer-should-read
I have my screen brightness very low, use software that tints the screen orange (filters out blue light), and use dark mode on everything. If I’m staying late and it starts to get dark, I get even more sensitive to screens and overhead fluorescents, so I wear these:
https://www.amazon.com/S0360X-Ultra-spec-Eyewear-SCT-Orange-Anti-Fog/dp/B003OBZ64M
They look ridiculous, but prevent my migraines, so who cares.
Never had a problem with floaters, but I’ve had them all my life so I never really notice them.
> Any tips on how i could engage with them more?
If this is something you struggle with consistently this book might help. What it basically boils down to is: engage with people. Ask them questions. People like nothing more than talking about themselves.
Yep. I came across this Quora post a while ago: What makes students from elite schools so special?
Yes, they're smart, talented, and dedicated students. But they also had guidance and encouragement in their upbringing and education. As one of the Quora answerers pointed out:
> "Every accomplished person I know had a mentor. Usually their parents, sometimes teachers or friends. Kids don't just start thinking "I want to go to MIT in 4 years, so I'd better start doing math contests, and getting research internships, and self-studying AP classes so I can take tests my school doesn't offer." Someone had to tell them those things existed, and that they could actually do them.
> Similarly, most kids don't think "I want to go work at a trading firm" or "I'm going to intern at Google my freshman year" until they go to a top school and see what their classmates are doing, and realize they can do the same things. This alone gives kids from top schools a huge advantage in the job market.
As /u/uojin said, they have a head start because of their backgrounds. Don't let that hinder your ambitions! And if it makes you feel any better, OP, you've made a connection to these prestigious networks via your "Big 4" internship.
Quincy Larson on the FreeCodeCamp blog wrote this post with 300 stories of developers who got their first jobs in their 30s and beyond.
At the beginning of the post he links to several dozen Quora posts: "Is x too old to start learning to code"? There's one link for every age between 14 and 60.
Not sure why you're getting down voted, seems like an emerging industry that could be pretty lucrative. I found one place on indeed
I use this hat as a cubicle. 100% serious. I also take off my glasses since I'm near-sighted. Basically I create my own cave where people don't disturb me. It's what I do to maximize my productivity.
I wouldn't say 8 hours non-stop. I take bathroom breaks and one big lunch break.
The only thing is I wish I could take a nap at work to increase my productivity.
From Clean Code:
"The Total Cost of Owning a Mess"
"If you have been a programmer for more than two or three years, you have probably been significantly slowed down by someone else's messy code. If you have been a programmer for longer than two or three years, you have probably been slowed down by messy code. The degree of the slowdown can be significant. Over the span of a year or two, teams that were moving very fast at the beginning of a project can find themselves moving at a snail's pace. Every change they make to the code breaks two or three other parts of the code. No change is trivial. Every addition or modification to the system requires that the tangles, twists, and knots be "understood" so that more tangles, twists, and knots can be added. Over time the mess becomes so big and so deep and so tall, they can not clean it up. There is no way at all.
As the mess builds, the productivity of the team continues to decrease, asymptotically approaching zero. As productivity decreases, management does the only thing they can; they add more staff to the project in hopes of increasing productivity. But that new staff is not versed in the design of the system. They don't know the difference between a change that matches the design intent and a change that thwarts the design intent. Furthermore, they, and everyone else on the team, are under horrific pressure to increase productivity. So they all make more and more messes, driving the productivity ever further toward zero."
Pomodoro timer method has been a godsend for me.
15-25 minutes of focused work, 5 minute break. Do 3 or so rounds and then have a longer break. Productivity ho!
They make a "messaging app". So it's going to be very young, very outgoing, very social.
So they're going to be looking for fresh-faced go-getters who think they're going to disrupt the industry. Essentially, if you've been working in the field for more than 5 years, you're going to be too jaded to "fit".
For them, drinking is a social activity, not something you do to dull the pain.
My favorite online developer community is actually Twitter. There's tons of developers online, and by following only other programmers, it turns your twitter feed into a second Hacker News.
Some programmers I follow: @dhh @getify @BrendanEich @jensimmons @sophiebits @dan_abramov @jeresig @danluu @willsentance @lenadroid @mjackson @ladyleet @housecor @left_pad @peggyrayzis @aprilwensel @ken_wheeler @noopkat @captainsafia @linclark @holtbt @spolsky @saronyitbarek @SachaGreif @iam_preethi @anildash @sarah_edo @codinghorror @bendhalpern @kentcdodds @wycats @wesbos @cmaxw @shanselman @rachelnabors @jennschiffer @rachelandrew @ossia
https://leetcode.com/problems/find-winner-on-a-tic-tac-toe-game/
You could check the solution here
It's pretty funny (or sad) that these problems can be gamed, it's funnier still that an unemployed person is probably better at solving them then the average employed dev (due to these problems not being representative of the real world and having more time to practice) . And this is just an easy rank problem, medium or hard rank problems are fair game at some companies
https://codesignal.com/resource/general-coding-assessment-framework/
They have some other research articles but that’s one of them. Our company started to use them too because their platform and pricing is much better than the competitors. They gave us like a 80% discount because we’re non profit.
Clean Code taught me how to write clean code. Cannot recommend this book enough, every place I've worked I've brought a copy and at least one coworker will borrow it and find themselves really questioning a lot of their decisions. It's also a great book to refer back to every few years.
edit: Truthfully, some was experience, seeing other people's code early on. Discussing with peers. Thinking about single responsibility et cetera. I don't think there is one source but the book is something at the top of the list.
Same here, in my Google phone interview I got asked this question and was asked to solve it in a google doc: https://leetcode.com/problems/subsets/
Needless to say, I bombed the interview. Luckily I'll be more prepared next time.
High Output Management, from former Intel CEO, Andy Grove.
I cannot recommend this book enough. Hell, I loved it so much I wrote an outline about it.
You can derive so much value from this, whether or not you are a manager.
> Are you supposed to just look at bug reports and try to come up with a solution
Yes, that is one approach. I would advise you to debug and fix something you are able to actually reproduce.
Another approach is to reach out to the project's preferred community (irc, mailing lists, whatever) and ask if anyone would be willing to mentor you through a new project. This will probably be something trivial, but it will get you up to speed. This doesn't always work, but can sometimes turn up good stuff to hack on.
> Is there a beginners guide to Git and open source projects out there that could help me get started?
I think the freely available git book is pretty good. The thing with git (and cvs, svn, mercurial, etc...) is that using it to collaborate with other people is much different than learning the basic mechanics of how to create a commit, push/pull, etc... One of the best things you can do to learn git is to simply start using it in a collaborative manner and pick up the parts you don't know as you go. You'll be a git pro in no time.
I read The Clean Coder: A Code of Conduct for Professional Programmers and it introduced quite a few different concepts and lines of thinking for devs. Good read.
In my experience, the more experienced you are, the more an interview focuses on things like prior projects, architecture, teams, culture, etc. I just completed a job hunt where I interviewed with several major east/west-coast tech companies, and none of them asked LeetCode-style questions. I did get programming questions and take-home exercises, but they were practical ones (e.g., discussing a real-world problem the company has) or, surprisingly, lightweight bozo screens (e.g., traversing a tree and printing values).
But it really depends upon the company. My understanding is that Google's interviews still consist of multiple rounds of LeetCode-style questions, though I've also heard that's changing.
I've been involved in hiring at several companies now, and I think LeetCode-style interviews are on their way out. The more nimble a company is, the less-likely it is to ask you the traditional LeetCode-style whiteboarding question. It's the slower companies that are entrenched in their cargo-culted interview processes that still ask LeetCode-style questions, including some Big 4s and Unicorns. But that will change. No one asks "How would you move Mt. Fuji?" anymore. I imagine companies will continue asking programming questions, but I expect them to become more practical, typically covering the sort of problem you might encounter if given an offer.
Not directly relevant to the OP's question, but I highly recommend reading Clean Code by R. C. Martin. Even if you're a student and don't actually want to be a programmer eventually, you will want to give it a read. It's that good.
I would pull out your algorithms book (or find a pdf online if you didn't keep one from college) and make sure you are familiar with some of the more common ones. Or you could start here https://leetcode.com/discuss/general-discussion/494279/comprehensive-data-structure-and-algorithm-study-guide
There really isn't anything in 'leetcode' problems that you shouldn't find in any decent CS Algorithms book. Its understandable to be rusty or have gaps, but really its just computer science.
They'll eat your food for you and help you lose weight
No but seriously though, I've never used it, but from a quick Google search (and based on yingbo comparing it to GrubHub), it seems like it's just a food delivery service- you buy food and pay an additional fee to Uber to pick it up and deliver it to you. Looks like you can actually see what's available in your area here: https://www.ubereats.com/stores/
First off, I'm surprised they have you writing unit tests. At my company, the dev who wrote the feature writes the tests, because writing a good test suite is harder than writing good code.
Second, I don't think you're in as shit of a situation as you think. I'd go to your boss and ask him for a performance improvement plan (PIP). Say what you said here: that you understand you're underperforming, and you want to do better, and you're willing to do whatever in the meantime.
However, if you feel that even with a PIP you'll get canned, you must remember that "it's okay." Tell that to yourself as you binge-eat Ben and Jerry's and binge-watch Bojack Horseman. The average dev gets fired or laid off 5 times in their lives. That's a ton. Getting fired is not a personal reflection of who you are as a person. If anything, you worked 20 hours a week while doing a major in three semesters! That's incredible! You have drive, you have gumption, YOU WILL SUCEED!
Ok, got a little sidetracked. If your primary goal is to become better at interview-testing programming for the backend, then I suggest brushing up with this: (https://github.com/jwasham/coding-interview-university). Using Python or Java start at Algorithmic Notation and go until Design Patterns.
LeetCode (https://leetcode.com/) is where FB sources their interview questions, so I suggest doing those, too. It's ok to struggle and look up answers at first, but make sure to try and learn to implement the solutions by yourself eventually.
You memorize the patterns and understand how to alter the pattern for a solution. You don't memorize every solution.
In reality, you should memorize the 20 or so common patterns (DFS, BFS, Binary Search, HashMap through an array....).
For example, you memorize Binary Search, and for a problem like this: https://leetcode.com/problems/find-first-and-last-position-of-element-in-sorted-array/ you realize how you alter binary search to get that solution.
I'm like 99 percent certain this is what placekitten was designed for. But in general, you should be charging above market rates for working on stuff you cannot place on a resume.
Just as a warning, I got burned by memorizing these instead of learning how to derive them.
I got a question during my interview that could be answered through a binary search like algorithm (https://leetcode.com/problems/search-a-2d-matrix-ii/description/). I knew the intuition as to why binary search was O(logN)
, but I couldn't extend it to the 2-d binary search, which had a time complexity of O((MN)^(log4(3)))
.
I did badly on that interview since I couldn't determine the complexity after coming up with the algorithm. If, instead of memorizing the binary search complexity, I had learned the underlying way to derive it (master theorem), then I could've figured it out.
DISCLAIMER: I am just one dude with some opinions on stuff.
> "How much does specializing in one specific area help or benefit your CS Career?"
It depends on how much mobility you want. Some people are totally cool grinding away at the same stack for 20+ years, some people want to do new things and work with new technologies at new companies all the time. I imagine both approaches have their long-term pros and cons.
> "Does this affect / prohibit you from trying new things, since you won't use them in the workplace?"
Not necessarily. It really depends on the company though. Some companies are perfectly fine with minor maintenance of their old COBOL applications.
My job primarily involves a servlet who's core code is around 12 years old, but that doesn't mean we aren't constantly looking at how new technologies can benefit the product. Part of why I was hired is a recent inclusion of Elastic stack software to vastly benefit our product's searches. So all these decades old Java/TSQL devs are now learning things (not everything) about Elasticsearch.
> "To what extent should you focus to become decently employable with one area?"
To the extent that it benefits your compensation or advancement within a given organization/domain. If something seems in-demand based on job postings, it's probably worth learning.
I used to do LAMP stack development professionally, but haven't touched the technology in quite some time. Similarly, the projects I work on in my free time have drifted away from that stack in favor of technologies more closely tied to my role in the company. Sure this means getting a LAMP job in the future may be more difficult, but it also means the knowledge of my company's current stack is stronger which makes me a more valuable employee (in theory, anyway). Trade-offs and all that.
Your resume sucks given your 20+ yrs of experience. Also, being a Co-Founder is a big title. It is usually 3 categories:
I'm afraid companies are viewing you as a #3, which is a big negative.
Read these books. Even though you have the experience, companies nowadays like to ask irrelevant "whiteboard" questions which have very little to do with the day-to-date of the position.
I also hate the way interviews are nowadays but it is what it is.
Given your experience, and likely skillset which you fail to advertise, I recommend these titles:
Good luck. Also, yes, $180k is very much possible in Seattle.
fwiw, bare minimum working code is often a good idea if we're talking about the amount of code to do some task :)
Design patterns are most useful in that they help you start recognizing patterns in your own code, and they show you a number of common patterns which can be useful - but it's good to keep in mind that you shouldn't force a design pattern somewhere just because it's a design pattern.
Anyway, the Design Patterns book is good, and so is Head First Design Patterns.
I should change my SN to "IndeedShill", because I love indeed. I think its the hands down best job search aggregate.
Other than leveraging your school's career center and your contacts, the best way to go about doing it is to do a generic entrylevel/junior software development search in your desired area and plug it into indeed. I've created one for the DC area.
This is the best answer. It’s the easiest trap to fall into. A lot of “We do it this way. It took a lot of work and the customer and/or military has to get involved if we do any huge changes. Leave it like it is.” The best way to get up-to-date tech into this type of environment is to do like Code Complete says to do when using a primitive programming language, “don’t code in the language, code within it.” You basically have to build bridges into the old, “unchangeable” tech, but then you’re free to use whatever you want with those bridges.
I've been reading Peopleware lately and there's a section where they talk about how "the market" doesn't require software quality above a certain point. Quality being defined as external metrics like performance and bugs, but also less quantifiable things like mental overhead. The authors claim that, in general, for most commercial software, the market doesn't care as much about quality as the developers do. What does a goal-oriented, rational manager do in this case? (See OP for more details)
They go on to talk about how managers tend not to factor in developer churn and disengagement into their decisions. Sure you shipped 4 features when you could have shipped 3, but now Johnny is quitting and you lose several years of domain-specific experience. Also your team is demoralized. Also you have to hire someone new. Also you can't ship ~~bugs~~ features while that seat is empty.
There's a great quote where the authors claim that "Quality is free, but only when you pay dearly for it". I'm not sure yet how much I buy into this, but what they mean is that if you invest in good practices if only to make the developers happy then you will reap long term benefits.
But yeah previous places that I have worked at have fit the above description and I quit because I lost hope that the cycle would be broken.
> Nothing to do but apply my man.
No. OP is rusty and will most likely not pass technical interview questions without a review. https://exercism.io/ is great for this. Doing a few of those, before interviewing is helpful to get back into the spirit of things.
It depends on the role one is applying for, but if comp sci questions might come into play during an interview. Elements of Programming Interviews is a great way to review and find any holes in ones knowledge when it comes to algorithms and data structures for backend dev roles. Web dev doesn't usually use comp sci as much.
OP will be asked why there is a gap. "Due to mental health, family problems, and a general lack of jobs in my area" is not a good answer. Instead, "I chose to help my family after I graduated." is a much better answer.
OP realizes there are not jobs in their area, so applying for jobs everywhere is a solution.
>Due to mental health
/u/digital_desperation I know how it is. I hope you've gotten or will get the help you need. Psychological stress never has to be a permanent problem.
Regardless if you have or have not gotten help, it's not a good idea to not talk about mental health during a job interview. I'd skip the subject entirely, but that doesn't mean people don't care.
I was in your exact footsteps a few days ago, however the following has helped me immensely really learn and never forget how to do problems.
1.Read the chapter of CtCi, and go through the problem and try to figure out how you would go about solving it. Spend atleast 20-30 minutes really thinking about it and trying to come up with a solution, looking at the CtCi hints once in a while if you get stuck.
After that, look at the solution and try to see the thought process that led to the answer, and THAT is what you want to retain and memorize, if anything. Do not memorize the code, memorize the thought process that went behind the solution.
Do this for every problem, yes I know it is time consuming but do you should never be expecting results overnight.
After, do leetcode problems, but search the tags you are specifically on in your chapter of CtCi. Ex. If you are on Chapter 1 - Strings and Arrays, search only String problems on leetcode. When doing problems on leetcode, grab a pencil and a notebook, and try to figure out the actual logic of the question that is being asked. I personally do not write out my code in the notebook, but i write all my thought processes and ill my test cases there. Thats another thing, you want to press Run/Submit as few times as possible. All test cases should be done in your notebook, you will thank me later because thats how you find out how your own brain process works.
If you still do not understand a chapter in CtCi, supplement your reading with Programming Interviews Exposed and Introduction to Algorithms.
I hope this helps!
I'm afraid, being a junior developer myself, I don't have great advice for you.
However this also demonstrates how very important it is to keep managers in the loop on development progress. Managers can't manage what they can't measure. I go by the advice that as soon as it becomes apparent that a feature will not ship on time/might face delays, notify your manager with the current situation and how you plan to address it. The book The Pragmatic Programmer goes into detail on this.
Management is at least partially to blame by not being a bit more hands on in delegating a large project to a junior employee and not insisting on regular updates.
If you're failing interviews and don't know why that's a big problem.
You should always know why you failed an interview.
My guess is that your fundamentals are not memorized. In order to do well Leetcode, you must memorize the fundamentals. Once the fundamentals are memorized, Leetcode becomes pattern matching to the fundamental template then understanding the small changes to the template.
To learn DS&A, take the Coursera Princeton Algorithms I && II and memorize every DS&A. Use flashcards. For example, you should be able to automatically type out KMP algorithm, graph BFS, topological sort graph, tree DFS, quick sort, merge sort etc....
Do not proceed with below until ALL the DS&A are memorized from I && II.
Once those are memorized, you then choose 1 DS&A and only focus on that.
Here is an example. Backtracking template. :
Once you memorize those templates, you then do only Backtracking problems. Do up to 50 backtracking until you get it. You will find backtracking problems are solved using those templates. Once you get backtracking, you will find you can do Dynamic Programming. Most Dynamic Programming problems are simply backtracking problems with memorization.
Here is another example. Binary Search template :
Once you memorize that template, only do Binary Search problems. Do up to 50 binary search until you get it.
Rinse and repeat for all other major DS&A.
Lastly, do lots of interview practice. A few weeks ago Interviewing.io offered packages where you could do 35? peer interviews and 5 'professional' interviews for only ~$550. That was a great deal.
Ha! I have a bachelor in software engineering, worked as a compiler developer for 3 years. So, don't worry about it :) Nobody will look at your degree and wonder if you had any compiler courses, they will just be interested in what you know about compilers. Lucky for you, compiler devs are in very high demand, but you do need to know your stuff.
So, aside from that, don't write a parser, nobody cares :) Writing your own compiler would be very cool, or hack on LLVM/Clang. A large amount of the work revolves around using LLVM, and it enables you to only work on interesting bits.
As for low level stuff, it might be a bit harder but it's a wide topic. Are you talking low-level optimization? Systems programming? kernel-mode?
EDIT: by demand, a short list of positions
Every single semiconductor company has a need for a compiler, so the list of big companies to apply for are AMD/Nvidia/Qualcomm/Broadcomm/Imagination Technologies/Apple/Microsoft/Intel Smaller companies can be found by by going through the LLVM devmeetings, it lists the company the speaker is working for. That should be a nice list. Stalking the LLVM mailing list might be a good way to find people as well.
As somebody that is a top SWE at what I consider a Tier B company it's fun for a while, but eventually you start getting minimal feedback on your code because nobody has real complaints. You also may be working with people who may not care as much as you and optimize work for doing as little coding as possible oppose to keeping to a consistent design.
I have been having this issue more and more as a Technical Lead where I feel my standards are just higher than most people, I've had situations where there is a laid out design but then people take exceptions to it because they can write less code in this part by doing it a totally different way. It's not that the original design didn't handle the case nicely, it's just because they could write less code. I never like that reason as a sole excuse, which is what it is most of the time.
Personally after being a Tech Lead, where it's 95% managerial and sitting in meetings with upper management, for the last 13 months I know I would rather be more of an individual contributor and not directly lead that team. I think it's worth while for all SWE to experience it thought as you can be a better SWE when you understand what your boss is going through and can feed him the data he really needs.
At this stage of the game I've been trying to move to a tier 1 company, but being 10+ years out of University these DS&A interviews are kicking my ass. I know I have a lot to learn and I want to work with people that can give me good feedback in code reviews and show me better ways to design code. Most people where I work do not even buy into Uncle Bob's book Clean Code as a good way to do design code.
To get back to your original question it depends on what you are looking for at any particular stage of your career. I don't think anybody can really answer this in a general way. I can see why some people would want to be the top dog in the room and others wanting to constantly learn from other people.
Set it up at name.github.io. Every account get's one.
Or if you buy a domain name you can still host for free on github.
http://www.curtismlarson.com/blog/2015/04/12/github-pages-google-domains/
Took me a few months for the Android application, maybe 1 month to practice developing for it and 2 months building the actual application. My first MEAN app took about 2 1/2 months and my second took about 2 months or so to get to a late beta stage and a few weeks to add small features and polish.
I've been building small stuff off and on for awhile now but nothing polished.
As far as resources go, I would 100% recommend Clean Code by Robert C. Martin. It helped me solve a lot of the frustrations with myself and avoid writing code that was nearly impossible to refactor. Stuff that I didn't know how to google because I didn't understand what I was doing wrong.
Other than that just used documentation and google and read open source projects to learn design patterns, particularly with Node. If I used a module in my project I would take some time to review it's codebase. Often it was over my head but it would motivate me at the very least to improve lol
To add to the low brightness setting recommendation, I can recommend f.lux. Once you get adjusted to the temperature change it provides. This can help so much. One of the gals I worked with got terrible headaches from the blue light, by changing the temperature of their monitors they were able to reduce the headaches.
Cannot really say which project I saw had the best code. After all, it's rarely that you are struck with lighting of wow, this is amazing!. Usually there is a lot of solid parts, a lot of less solid and once in a while some nice trick that make some particular thing easier. But code filled with nice tricks only would be a horror.
I guess that libchrome would be a candidate, but not because I found some ingenious code piece, but because of overall high standards of code - I simply didn't found there any part that would make me unhappy to work with.
It's easier to point guy who was the best programmer I met. Fellow student, one year older than me. He graduated university magna cum laude, even though last 2-3 year of studies he worked (and excelled there). Each time I asked him about something he either pointed me in right direction or (if there was deadline and we had no time to play around), he typed solution explaining it to me so fast I could hardly follow him. And besides having both great theoretical and practical background, he was very slim, because he regularly trained. On top of that, he was a nice guy, far from being self righteous asshole like many people with same amount of skills.
>relationship between equals and hashcode in java as an example
I mean, that's pretty core knowledge, honestly. It's very dangerous, too, not to know that-- if you override equals and don't override hashcode you can get some extremely subtle bugs in production.
If you're looking for Java jobs still, I would recommend reading through Effective Java, it's a great book that will be very helpful both in the industry and in interviews for Java.
I dont know what they have to do to hire you, but since here are only negativ comments id like to add something positiv.
Stackoverflow carrears often has post from companies who offer visa support and relocation.
https://stackoverflow.com/jobs
Having developed an ios app with 3 mil downloads is a good starting point for sure. I wish you all the best.
The Zenefits CEO is questionable.
Read a few of the answers to see what he did.
EDIT: /u/murderfs has the original post of the CEO. Definitely worth a read.
Or look here. Not someone I would want to work for.
I have a lot of programming experience from my side projects, which range from writing GUIs to codecs, and also I do a lot of CTFs.
To practice for the interviews themselves, I used LeetCode and Daily Coding Problem. I got the Plus subscription for DCP. It probably helped the most, I saw a lot of Google interview questions on there and doing one problem a day helped cement things without being too overwhelming.
Hope that helps!
Find books that are language agnostic. I keep a list of good books I read and here are some I've found to be the most useful:
There are plenty of books that are great for studying for interview questions, but I think these books helped me prepare much better in terms of being more comfortable speaking about software development.
This may not be helpful at all or even what you're looking for since I'm still a student learning the basics, but I'm currently reading "The Mythical Man-Month" by Frederick Brooks. I've seen it recommended a lot around here and just thought I'd give it a read. It talks a lot about managing teams when developing large systems. To be honest, a lot of it is over my head, but I still think I'm gaining a lot of insight into organization of programming groups. There's a lot of lessons from old time coders that I could imagine helping a lot. I'd certainly say check it out if you haven't read it. It may not be exactly what you're looking for, but it sounds pretty close to me based on my very limited experience. Good luck!
Can't recommend this enough even though it doesn't cover everything: Andy Grove's "High Output Management" https://www.amazon.com/High-Output-Management-Andrew-Grove/dp/0679762884
Two of your own sources suggest otherwise.
Straight from the intro to the first book you listed:
This book covers enough material for a standard Introduction to Algorithms course. We assume the reader has completed the equivalent of a second programming course, typically titled Data Structures or Computer Science II.
And the first 25% of CTCI is focused on DS. Not, mind you, on teaching you about DS. It's focused on testing you on your (pre-existing) knowledge of DS.
So yeah... you should probably learn about DS first. If you're the kind of person who like approaching things in a logical manner, which I've heard is a good quality for SWE's to have.
Structure and Interpretation of Computer Programs. This is a great bottom-up tour through selected topics in computer-science and the underpinnings of defining a programming language.
It can be pretty easy to get caught up in the SF humblebrag circlejerk around these parts sometimes, but this is still a high-skill field, and you need to know what you don't know. You can gain this knowledge by trying different languages, finding their similarities and over time building a solid CS base.
It sounds like you've focused your efforts on results-based work. While that can work at times, if you're working on a team with a product that is meant to have a lifespan of years, this type of mentality is not sustainable and the project will become increasingly complex and will result in a full rewrite to fix these core mistakes.
I would suggest studying the fundamentals. Proper OO-design, algorithms, and general good coding practices. I'm currently reading Code Complete by Steve McConnell, which goes over a lot of these "general" good practices, even if it's mostly Windows-based, and I've never used .NET or anything. Cracking the Coding Interview will also give you a good idea of things you need to learn. Learn the concepts that you can carry to other languages. Diversity that portfolio and don't pidgeonhole yourself in a technology that may die in 10 years.
Looking through your history I saw you posted your resume to r/resumes which is of course the best first step, however, the subreddit isn't tech based so they most likely have no idea what to look for to be actually considered for hiring by software engineers. I thought this subreddit had some megathread for resumes, but not seeing it here atm. But you can edit it in your post if you want some more people to see it. For me at least it seems a bit lacking you might want to add more to show off what you know / and or your skills that you have learned so far. Maybe it's different for me though since i'm in the suburbs compared to an urban tech hub like NYC, but to me the format should be more simple less flashy with those bordered titles. https://www.sharelatex.com/templates/cv-or-resume/software-developer-resume is a good template I would say.
​
Besides that honestly I would think an internship at the end of your degree is helpful, but bigger picture is should focus more on what lands you a full time job and while an internship does do that it's a pretty big investment for a company so can sometimes be a lot different. Maybe you should be inquiring companies about full time position close to graduation instead casting a wide net if you can to a good range of different kinds of companies.
There's absolutely no reason to do a paid course..
At least start with freecodecamp.
Javascript: https://www.freecodecamp.org/learn/javascript-algorithms-and-data-structures/#basic-javascript
A react course, for example: https://www.freecodecamp.org/news/react-10-hour-course/
Unless there's a reason to say these are worse than paid courses?
Stripe and Zillow both really impressed me. Both companies had extraordinarily friendly people.
Stripe's interview process is the best I have seen. It really reflects a real-world work environment. There is a good Quora post on how their interviews work. Every person I spoke to was amazingly friendly and intelligent. I really enjoyed how I was allowed to use my own computer for the interview. They encouraged me to use online documentation and look things up online if I needed to. Instead of being like a Q&A it was like I was working together with the interview on the problem.
Zillow had really friendly people as well. I was a bit skeptical after my first phone interview with them (it was like talking to a wall), but my on-site was very differently. I enjoyed chatting with every one of the interviewers. Each person seemed to really enjoy the culture and work-life balance of the company too.
I'm interviewing for Lead/Senior positions with 12+ years and currently in a Staff position at an F500. I've gotten asked leetcode questions so far in 4 of the 6 interviews I've done. BT and BFS questions. 1 min/max heap. Which I reviewed beforehand, but afterwards, I found the questions on leetcode (I hadn't done those). I didn't do too well. All for backend development. A few system design questions (which is what I'd mostly expect). It's really fucking lame.
I'm pretty sure they were going off of this list: https://leetcode.com/discuss/general-discussion/460599/blind-75-leetcode-questions
How often does anyone even implement hard leetcodes from scratch like they'd want tested anyway? It just makes no sense.
If I wanted to build a hash table from scratch or something, I'd look up how to do it the right way, instead of hoping I could do it by memory. And even then, there is an implementation out there that has done it as well or better. But that is at least a useful problem you might want to do in the real world or something for some incredibly specific reason.
Meanwhile, look at this hard leetcode problem: https://leetcode.com/problems/find-the-closest-palindrome/
Given an integer n, find the closest integer (not including itself), which is a palindrome.
The 'closest' is defined as absolute difference minimized between two integers.
Example 1: Input: "123" Output: "121"
I mean. FFS. What a useless logic puzzle. It actually feels insulting to be presented something like that. lol
Like others has said, I think it best not to overthink it. My first iteration wasn't really pretty, but it gave me a base to work on and keep improving.
Generally a static page (or static pages) is all you need for these types of websites, so feel free to check out free hosts such as GitHub Pages. That will accelerate development (and help offset costs!)
Here is my current portfolio.
$40k is absurdly low for NYC unless you're getting significant equity. Something in the ballpark of $60-100k + equity is more reasonable.
Check out angel.co. There are tons of startup jobs on there and most of the job postings have salary ranges listed. It'll give you a rough idea of what to expect.
We are cash positive though our costs are generally < $20 / month 😄. We're completely boostrapped right now and don't actually have salaries. We spoke more about this here: https://www.indiehackers.com/interview/da7a4f5d63
Happy to answer more questions and would love any suggestions you have for us!
— Zaheer, Levels.fyi
Your challenge is to show what value your position adds to the company. That argument is almost always going to be best framed within how that company operates -- not something anyone in this thread but you understands even on a basic level.
Just my opinion: Escaping the Build Trap provides a good foundation on which to build your arguments. UX sits very thoroughly under the topics discussed within -- and you can probably find this particular book on the high seas for free.
But if this is true:
> the design team does not want me
I don't see what convincing the CEO changes. Unless you're actually some sort of product management wizard, you're going to have an awfully hard time working with that team effectively.
Are you a CS undergrad? If so you should be able to understand basic Java OOP concepts by your junior year. If you're having a hard time you should read "Effective Java". To get over this hump of having a hard time understanding Java and such, spend some time reading "Effective Java", writing small programs like tic-tac-toe, etc... What language have you learned in school for intro to CS, and data structures? Honestly, don't focus on the language or technology, focus on becoming a good programmer that can solve logic puzzles and can design a basic object, or design a nice functional program. Focus on doing this with the language you already know. Good luck.
wow. I'm surprised these two aren't listed yet:
Pragmatic Programmer - this one's at the top of my list. I think that every single programmer should read this book.
Effective Java - although it's written for Java there's some great fundamentals in there.
a lot of people also mentioned Clean Code - while some things in there are important, I personally don't agree with everything that Bob writes about
Effective Java assumes you have a solid grasp of Java. If your knowledge is shaky then you might not benefit as much as you could from the book. In that case, I'd suggest reading Thinking in Java first.
Clean Code is good, but IMO Code Complete is superior. It covers just about everything you'll need to know about software development; debugging, refactoring, design, and most of the concepts covered in Clean Code.
Amazon is the biggest, it currently has 4600 open positions they're trying to hire for, Google, Facebook, Apple, Expedia are expanding into much larger spaces, Expedia's HQ is in Bellevue but they're building a new campus downtown Seattle, Google has 2 offices they've outgrown, Apple is building a second. Facebook just moved to a much larger building so they can continue expanding.
EMC and F5 networks are big companies, RealNetwork, there are several hundred startups and many more non fortune 500 companies that work for the big 5. Panasonic's corporate office is here. Even Nordstrom has engineering jobs here which I don't think of when I think software.
Tableau has exploded, Nintendo is in Redmond, Disney and EA have engineering offices in Seattle. There are a bunch of game studios, Big fish, 17 bit, Popcap, Valve, etc. Valve is in Bellevue.
Vulcan, Allen Institute, Gates Foundation, and a bunch of non profits also utilize the smaller companies as well as their own internal engineering teams.
There a ton, here's the top 200 startups not counting established businesses: http://www.geekwire.com/geekwire-200/
Airbnb, Lyft, Dropbox, Groupon, GoDaddy, HP, etc have an engineering office, Alibaba has an office rumored to become their north american HQ.
There's a ton I'm not remembering or haven't heard of but that have thousands of employees.
They will probably use a program like hashcat to try to brute force the weaker passwords. Note that this program doesn't work backwards from the hash; it generates password candidates, applies the salt, hashes them, and compares that hash against the known hashes from the database. It will probably be able to crack the weaker passwords (and most user-created passwords are weak).
So it's really likely there is something wrong with your resume BUT I think a lot of people are missing the bigger picture here. Quick, name me the 127th company you applied to. Can't remember off the top of your head? Why would they want you then?
Whenever I've hired for a company, any junior/entry-level dev whose application felt copy/pasted was an instant pass for me. Maybe I was a minority but do you think the 201st or 202nd application would be any different at this point?
Since it seems like you're at your limits and want to try something different, try spending an inordinant amount of time on your next application. Seriously, do everything you can to research them, read every part of their website, blog, company Twitter. Know them better than they know themselves. Build a side project related to their product/service that reflects how much research you did on them. Really try to put yourself out there and let them know how much you like their company and how you can be their next junior dev to help them solve whatever it is they need help with.
Just do that and let me know if it their response feels different in the slightest. I guarantee it'll be different. I guarantee you'll get an interview and you'll have a great conversation with their hiring manager(s).
Here are the slides to a talk I gave recently about this very topic and why I don't recommend the en masse application: https://slides.com/kevinko/deck
> My boss is an understanding person and knows that we're stressed, but the larger organization seems uninterested in reorganizing to lessen our burden.
That's all you really need to know. You expressed a concern about the health of the team(s), and the broader org said "no, this is fine". They can live with all the benefits and consequences that come with that decision. All you need to know is whether or not you can live with all the benefits and consequences of that decision.
> Are most jobs like this?
I would say no, but practices that promote burnout aren't exactly uncommon -- toil is one example.
It's not uncommon for organizational practices/structures to foster high levels of burnout, but most orgs who give a shit will tend to fix those problems because turnover tends to be more expensive than simply fixing the problems that cause the turnover. Kinda sorta depends on the business's priorities, though. Showing the value of strategic investment in technical resources is ... difficult at times. I like the approach taken by Accelerate -- numbers and figures are what your manager needs to be focusing on, though it is hard to do when you're drowning already and engagement from leadership is low to non-existent anyway.
Throwing another into the ring: The Clean Coder, written by the same guy who produced Clean Code which is fairly popular. I've read the majority of it and found it pretty useful.
From the book's description: > Readers will learn
> What it means to behave as a true software craftsman
> How to deal with conflict, tight schedules, and unreasonable managers
> How to get into the flow of coding, and get past writer’s block
> How to handle unrelenting pressure and avoid burnout
> How to combine enduring attitudes with new development paradigms
> How to manage your time, and avoid blind alleys, marshes, bogs, and swamps
> How to foster environments where programmers and teams can thrive
> When to say “No”–and how to say it
> When to say “Yes”–and what yes really means
I don't think it's the kind of sleep issues you're talking about, but I have found that using blue light filters on my phones and PC at night really does make a difference in how easy it is to fall asleep.
For desktops/IOS: f.lux
Android: Twilight
The red tint takes a little getting used to, but now i find my eyes hurt at night if I'm looking at a screen without the filter.
There are some interview questions that test an interviewee "how good are you at memorizing problems".
Such include leetcode questions like Cherry pick up, Maximal Rectangle, etc.
https://leetcode.com/articles/cherry-pickup/
Imagine having never seen this problem and told to complete in under twenty minutes. This is the current hiring process at major tech firms.
Some people get super easy problems. Some get totally screwed over. It is a dumb process.
I really liked Coursera until they gave me this problem verbatim:
https://www.hackerrank.com/contests/juniper-hackathon/challenges/metals/problem
I actually like these types of interviews (solving a bite-sized, technical problem) but esoteric dynamic programming problems are just garbage.
Summary and Examples of Classical Design Patterns
The Architecture of Open Source Applications
Frequently Recommended Books:
Clean Code
The Pragmatic Programmer
Code Complete
Design Patterns
Head First Design Patterns
How to learn the things you don't know you don't know:
Look up software developer positions and check out the responsibilities and requirements.
If @MelAlton is correct about your housing & travel expenses being paid, take that advantage to grab the bull by the horns turn this into a success. From a quick search of "Intern" in "San Francisco, CA" there looks to be quite a bit of opportunity available (http://www.indeed.com/jobs?q=intern&l=san+francisco%2C+ca). I don't know anything about it but there's also www.internmatch.com. Try to write an engaging cover letter to each contact (you may also want to reach out via LinkedIn to the decision makers, explain your situation (due to an unforeseen internal structural change you are in SF, available and hungry for an internship… you can start now, do they need coffee brought to them?! make it personal, quirky, short & to the point and hard not to pay attention to), follow up and be aggressive in your approach (but not your manner) to create a solution. In the future you may be asked an interview question similar to "tell me about a time when you faced an obstacle and what you did" - figure this situation out and you've got a golden answer! I love this advice for a cover letter which I typically am not a fan of but sometimes it's just what you need: https://www.linkedin.com/pulse/20140827010005-516413-let-me-hire-you-five-things-that-will-kill-your-application Good Luck!
EDIT: adding InternMatch and "short & to the point"
> There's a new flavor coming; Typescript. Not sure if it will gain momentum or not
Coming? Not sure if it will gain momentum? Typescript is already extremely popular.
> If it does and eventually it gets a JIT and advanced language features, e.g. generics, then it might become The One. I think it will take a couple more iterations though
...
JIT is antithetical to Typescript's approach: https://softwareengineering.stackexchange.com/a/275499
Generics: https://www.typescriptlang.org/docs/handbook/2/generics.html
It's really odd for you to make sweeping statements when you don't seem to know anything about Typescript other than it's name and that it compiles to JS.
That's a very org/team specific thing. At GitLab all meetings are optional by default. With my team, I'm specifying in the Outlook event who is required and who is optional.
> And having a registered .com (I have one on godaddy, 7 dollars a month is pretty affordable) where you can show off your work is definitely a plus.
Even better would be to pay $10/year for a domain off namecheap, and host your site using Github Pages for free. Can also just stick to the free domain you get (username.github.io).
Buffer is a 100% remote company and they keep a spreadsheet of their employees' salaries:
https://docs.google.com/spreadsheets/d/1l3bXAv8JE5RB9siMq36-Ogngks2MT6yQ5gt8YXhUyAg/edit
They also have a calculator that you can use to calculate your salary:
I'm a big fan of the book about the Theranos debacle, Bad Blood by John Carreyrou. It's a great case study on messiah complexes, bad leadership, and organizational dysfunction.
I've said it a million times and I'll say it again: Get your hands on a copy of Cracking the Coding Interview and read it from cover to cover. If you're going into college now most of the information in this book won't make sense if you don't know how to program, but regardless I would still pick it up. Study this book for interviews. If you start using this book to study for interviews (And you need to study for interviews, treat interview prep like any other class) I guarantee you can land an awesome internship and a great job.
Because it has the unix terminal. Words cannot describe how useful this is. You have to experience it.
Because they are actually pretty well designed machines. They look beautiful. They are light to carry (you will be carrying this everywhere). They generally have pretty good processing power. And there's nothing like a couple of seconds boot time.
The operating system doesn't have those god-awful tiles, and (apart from the maximise function) is actually very nice to use.
The hardware has been specifically designed to work together. This is as opposed to my windows 8 laptop, in which the sound decided to stop working when I updated to 8.1. Most computers have hardware bottlenecks somewhere - the macs are designed not to. Because of this, the mac has been declared the best Windows laptop
The small things. The magnetic case shut. The magnetic power accessory. The amazingly high resolution screen. The light-up keyboard. The function keys that actually work properly. The multi-touch trackpad that actually works. The very high (for its size) battery life.
Don't get me wrong - Macs are certainly over-priced compared to other laptops, they are a much higher price for an equivalent product. But if you have to get the best laptop which you will use every day for work, and you have the money to spend, I would recommend one.
If you are really worried, you can rewrite history in git and (force) push that up. Github even has a help page on how to do that. As an aside, I'd be much more impressed with someone who knew enough nitty gritty git to do such maintenance.
Why is topcoder so difficult to navigate? Is this site only for live competitions? Are there no practice questions? The only place I can find actual questions is here, and these seem to be bounty type / long term projects - nothing short enough to be interview material.
I keep hearing great things about topcoder, but I cant for the life of me figure out how to use it. Am I missing something?
Hi - Jeff from the Apache Cassandra PMC. Apache Cassandra is a NoSQL, Big-data database, which seems to hit a handful of your tech/interests.
We're always looking for people to work on new stuff. It can be very, very basic, or more involved. If you've never used cassandra, check out some of our low-hanging-fruit JIRA tickets.
Low hanging JIRAs are here: https://issues.apache.org/jira/secure/IssueNavigator.jspa?reset=true&jqlQuery=project+=+12310865+AND+labels+=+lhf+AND+status+!=+resolved
Instructions on how to contribute are here: http://cassandra.apache.org/doc/latest/development/patches.html
If you're wondering WHY you should work on cassandra, consider this: it's used by companies like Facebook, Apple, Netflix, Walmart, Uber, and Microsoft.
If you need help, #cassandra-dev on freenode is typically responsive during PST business hours. The dev mailing list is active, and you can email me directly (my reddit username @ gmail, or @ apache, or whatever you prefer). I'll help review+commit your contributions, just nudge me to get my attention.