Try the custom AI to help you find products that Reddit loves.
A lot of people are answering if knowing data structures is useful.
To actually answer your question, you will need to know data structures and algorithms for the larger tech companies like Facebook, Apple, Amazon, Netflix and Google (FAANG). Smaller companies will focus less on those academic things, and focus more on what projects you can actually make.
Cracking the Coding Interview is the seminal book on these types of interviews.
Interviewing is a skill and while practice helps some will naturally be better at it than others (interesting side note is that when I talk with HR there is little data to show that getting all "strong hires" actually leads to better performance once in the company. From what I remember, a mixed review with mostly strong hires and one or two weak or no-hires often ended up getting better perf rating.)
I've found the larger tech companies: FB, Google, MSFT, Amazon, ... would all pay more than you're making now in salary but the big difference would be that I'd expect to the stock grants to at least double this (at your level). I haven't found that salaries go up "that" quickly but the initial stock grants and (to a lesser extent) the annual refreshes do. With your experience you'd be looking at the upper end of L6 or just into L7 (for FB/Google levels) which should compare nicely to the consulting salary but have better benefits, stock, ...
I will also note that there can be stigma against "older"/"mature" companies like banking, hospitals, (heck even sometimes against MSFT employees) in this area. Besides showing them that you can code you'll also need to show them that you're fun and are a good "culture fit". For me this is the hardest part of the interviews. While I want to have fun in my job it is my job and I take it seriously. I often feel fake trying to be a culture fit with people 10+ years younger.
Galye, who is not me but is awesome, has worked at a number of these companies then wrote a few books about it ex: https://www.amazon.com/Cracking-Coding-Interview-Programming-Questions/dp/098478280X
> Given a few years, could you teach your mom (or dad) to pass a technical interview at Amazon? How about your best friend from high school?
I'm not sure this is the right question to ask. Technical interviews are notoriously bad at selecting for actual competent software engineers. If you spent years just studying a book like Cracking the Coding Interview, to the point that you had memorized most of the problems and solutions and were able to infer patterns from them, you might be able to pass a technical interview loop. But you probably wouldn't actually be a good software engineer.
But to answer your question, I think it would be very hard to teach this to my parents. They're both smart, but they lack the foundations for for computer science, and they're old enough now that I think it would be pretty hard for them to adjust to the ways of thinking required.
My best friend from high school... also unlikely. That person is not dumb either, but I do think that CS requires, as /u/brberg put it, "a certain way of thinking that may not be teachable." Whether or not it's learnable is another question, but if so I think you have to learn it through practice rather than instruction.
I'd still do it just for the interview experience. Most people fuck up their first few from being too nervous or not really understanding how to conduct a proper interview. So I think you should apply. The experience is well worth the $200 fee.
The classic goto for programming interviews is "Cracking the Coding Interview". Just read this book and make sure you can do 70% of the questions without too much issue and you're almost guaranteed to land a PEY job.
And don't worry about meeting their demands. This is about you, not them. Fuck them. Just focus on you. If they hire you then great, it was their decision, you don't have to sulk over them making the wrong one. But this is rarely the case. They know what they're getting when they take in PEYs and they don't expect much except for a good attitude.
Also, if you haven't already, take an algo/datastructures course.
Confermo informatica (Scienze mm.ff.nn. - ingegneria informatica è un'altra cosa a livello di studi ma praticamente identica per sbocchi lavorativi)
Lavoro per una big mondiale (non Google). Mentre facevo l'uni avevo tempo per le feste, vedere gli amici e ho una vita anche adesso e lavoro raramente il weekend - cosa difficile da dire con medicina.
Con questo passate il colloquio tecnico, ma non basta. Anche i soft skill sono essenziali.
Not sure there is just a book. You might look at books geared to programming interviews. Here's one
I think people generally pick this up by getting a CS major. Through the various courses you'd take (say, computer architecture, OS), you'd learn this stuff. Also, what is called CS2 (second semester programming) would generally cover OO concepts (at least in the US).
É mais para exercícios de código propriamente ditos, mas não posso deixar de recomendar um livro excepcional: Cracking the Coding Interview: 150 Programming Questions and Solutions.
Thanks for all the background. You might want to spend some time focusing on some of the fundamentals - you have a lot of the fancier (or, rather, outside of university curriculum) abilities going on, but I don't see too much around focusing on data structures or testing. Data structures can definitely seem more abstract, especially up against the problems you're solving, but I think you'll find they're what separates the jobs of putting together off-the-shelf components (lower paying) with working on novel/complex software (higher paying, better ladder). Testing, on the other hand, can and should be applied to what you're working on right now - my advice is that if you're happy with the projects you're taking on, and not too interested in deep diving on data structures just yet, start looking into the best practices around testing (unit, integ, black box) and continuous deployment. You can apply those to what you're working on to see their value, and cost, first-hand.
You'll need the testing & data structures fundamentals to get past an interview; from an educated guess, you'd probably impress an interviewer right now, but they might not be able to pass you unless you get a bit deeper on those fundamental more data structure/algorithms-y areas. Let me tell you, there's nothing that sucks more as an interviewer than seeing a candidate who impresses you with extras, and has the capability to learn quickly but just can't quite get past the screening problems (if you want a book close to interview time - get this one).
Master this and you'll have no trouble with future interviews (minus nerves). You could certainly try applying to Google again next year, as a previous rejection won't be held against you. Also you could look for these "1 year internship" positions at places like Google that transition you to software engineering for people with a weaker background in CS, it pays slightly less but I'm sure someone like you wouldn't have trouble getting a full time offer after that. Also if you have money on hand, you could apply for a Masters of Engineering at a top school, pay 1 year of tuition to get some solid coursework + a brand name on your resume (however unfair it sounds, school name along will get you interviews).
"I dont want to do the CS major as it seems too bureaucratic and without direct application in the employment sector" uh what? CS has a very direct application, which is software engineering or algorithm development. Both are essential in industry. Really confused by what you mean by "too bureaucratic"
1) If you're looking to get employed in software look at Cracking the Coding Interview
2) Take CS111 as well, you will probably get asked operating system concepts during your interviews
A+ cert is a joke and a waste of money, what are u gonna do with that? Update windows for the rest of your life?
Spend your time and money on this book and read it and send your resume out to as many companies as you can that are hiring entry level developers. Spend your other time solving problems on hackerrank in Java and C++ and post your solutions on github. Do this and you'll definitely get a job.
So I was an avid doer of the Global Game Jam. So I had more projects under my belt than the average student. This really stood out to companies, so I went in for rounds on interviews. Did good enough with them to get an offer. (This was in Junior year).
People say GPA doesn't matter, but try to keep it above 3.0.
Get this book: http://www.amazon.com/Cracking-Coding-Interview-Programming-Questions/dp/098478280X
Its not PERFECT. But it'll get you a good start.
Start early, ideally I should've started looking for internships after freshmen year. Don't take summer classes. Summer is valuable internship time. Plus its stupid to spend extra money to take classes. Just pass all your classes the first time.
Write a document of things you think you need to learn, in priority order, and have another daily journal where you write down your thoughts/accomplishments each day in meeting anything on that first list.
Everyone fears wasting their time learning the wrong things. Alas, it's going to happen. Either you waste your time learning the "wrong" things, or you don't learn anything at all (because your fear stops you), or you constantly dabble (learn an insignificant amount about everything). I don't think dabbling is horrible because it gets you a picture of the landscape, but if you want to make progress, you need to pick a few things to work on.
Look up books on handling technical interviews, e.g. http://www.amazon.com/Cracking-Coding-Interview-Programming-Questions/dp/098478280X
And practice your tech interview skills, since you need a good interview to get to that internship.
You should revise, among other things, the design section in Cracking the Coding Interview! book.
Also, thanks for sharing your experience, I am sure there are others having similar experiences.
Focus on Android architecture. I see too many people recommending RxJava or some other framework. I interview people regularly and would not care at all if you learned or mastered these frameworks. What I care more about is your ability to pick new things up and learn them. Each tech stack at a company is different and I would never ding a candidate for not knowing a framework. I however would care if you could/couldn't pick up a new tech stack.
Each company will be different but in your case I would focus on just the fundamentals of Android. Understand things like Autoboxing, performance, some basic understand of big O notation might be nice. The more I get the feeling you generally understand what you are talking about the more likely you will be able to pick anything up quickly.
If you can try to do some research on the company maybe see what challenges they have. For instance if they are an ecommerce app they might work heavily with checkout systems or payment systems. Try to tailor your Android experience around there challenges and use that to be positive.
They probably know this is more of an entry level position and aren't going to expect you to go super in depth. Be enthusiastic, show you want to learn, and show you have the ability to pick up things you don't understand yet. It sounds like a have a good grasp of a lot of different components of Android. Focus on refining those. Some of the Android performance videos on Youtube also have some good info.
I highly recommend reading or checking this book out if you have the time: http://www.amazon.com/Cracking-Coding-Interview-Programming-Questions/dp/098478280X
Edit: The advice no_life_coder gave you is spot on.
First, ask your recruiter if she has any advice for how you can prepare. I've spoken to many recruiters who will explain the type of interview you're going on, and offer helpful tips (they want you to get this job, remember!).
Next, check Glassdoor and see if the company has interview questions posted, this can give you an idea of what to expect.
An obvious answer but the best way to prepare for an interview with HTML/CSS/SQL/JS is to learn HTML/CSS/SQL/JS. Since your HTML and CSS is very good already then I would focus on buckling down and reading 1 good technical book each on SQL and JS. A good JS book will not only cover most of the common interview questions (== vs === for example) but will give you a strong foundation when you start your job. Just going through a list of JS interview questions out of context won't give you the full picture like a book would and you won't really learn the language that way. You won't learn it without actually coding in it either, so practice on jsbin.
They're going to ask you "what's your experience with [language]" so casually rehearse good answers to all of those possibilities.
In general for coding interviews buying this book is a must.
agreed. Also, regardless of if you take an algo class 1st semester (which you should unless you have a lot of experience with well known algorithms) get a copy of cracking the coding interview and do all the practice problems.
AP CS is a good place to start, but it might not be a strong enough foundation to ace technical interviews. I've found most companies don't have "practical application" interviews - meaning if you're interviewing for a web internship they will only ask you a few web questions and focus on general algorithms instead. Not to say you can't learn these on your own, PLENTY of people are great self learners. It will just be easier in a guided class probably.
> I consider myself to be a good programmer now. I can comfortably receive requirements for a project, design a solution, write the code, create a nice UI, debug, and release. The majority of my experience has been in desktop application development. VB/C#, Winforms, WPF. I know my way in and out of the syntax, OOP, multi-threading, LINQ, MVVM, and so on.
You don't mention data structures and algorithms.
If you're interviewing with larger, established companies then they will want to make sure that you know the fundamentals before investing time in training you and the questions they throw at you will likely be about designing a data structure or big O analysis of an algorithm.
If you're interviewing with startups, then ya, they mostly just want to make sure you can actually code and start contributing ASAP.
This book is great for giving you an idea of what to expect and how to prepare, 'Cracking the Coding Interview.'
Also, if you're unclear of what they mean, ask for clarification and get additional information. That is likely part of the interview.
Unless you want to work in compilers professionally, there are a lot less intense ways to get attention than working through the dragon book. I loved my compilers class, but honestly, i use very little is anything I learned in that class in my day to day job.
Just start sending your resume out everywhere, there are plenty of CS grads with no interships that find entry-level work. The best thing you can do is practice interviewing so when you do get a bite, you can blow the interviewers away. I like to recommend Cracking the Coding Interview to just about everybody.
A "solid understanding of CS concepts" means being able to look at a problem and say "oh I need to do BFS to find xyz". It's really vague but basically it means you are able to apply the theory you learned in school to everyday problems.
If you can get through the questions in this book http://www.amazon.com/dp/098478280X/ you probably have good fundementals.
The worst thing about all of this is really your "hopelessness", because that is will keep you back.
>my experience with technical interviews are "answer these specific questions and solve these problems" and I choke and I flail and I fail.
For interviews, the more you do them, the better you get at them. Did you try the bible of interviews?
>If you give me a week or two to learn a programming language and/or codebase, I'll be there, I'll pick it up maybe faster than anyone else you've met. But there's no way for me to demonstrate that in an interview,
The more work you do on side projects, the more you have to show and talk about so there is a way to kind of show that. Especially if you become very involved in larger open source projects or heck write your own fancy smancy something separate program.
Most people cannot write a complete program, as they often deal with sections.
>So school didn't really work out for me, and I dragged it out for a long time before being forced to accept that.
School didn't work out for me either and I constantly was failing in high school, but I stuck in there. Eventually I worked my way up to a top 3 school for CS.
It was about finding the right learning environment and community college was a great way to do that inexpensively. It might be an option to try that. I am assuming you have something like that in Canada.
Also, it sounds like you have way more experience than a normal student so that is a huge plus!
Stick by it, and there is certainly hope!!! :D
Figure out what you didn't do well on in each interview, and fix that. That is how I got better at interviews. Consider each interview as an opportunity to figure out your weaknesses. Ask interviewers what they are looking for in a candidate, and for recommendations for improvement if you are rejected.
Read this book. Actually work through the problems on your own. Many interview questions are variations of the stuff in there.
Could you do mock interviews?
And, don't lie unless you have an amazing pokerface.
Good to see some companies are still attempting to be like Google 10+ years ago with the stupid riddle questions. Most companies, Google included, have realized that riddle solving skill isn't a good predictor of actual ability as a software engineer.
If you are a computer science student starting to look for work I would HIGHLY recommend you read this book: http://www.amazon.com/Cracking-Coding-Interview-Programming-Questions/dp/098478280X
It will walk you through the interview process and give you a bunch of questions for practice. Keep in mind though, if MACH is customer facing technology with roles like Service Engineer, Support Engineer, Tech Evangelist, that book will be overkill. Those roles require familiarity with and enthusiasm for technology, but not actual coding experience in the way that Software Engineer at Microsoft requires.
Go find and read/memorize "Cracking the Coding Interview". It's the one book I've had consistently recommended to me by Software Engineers, hiring managers, and other co-op students :)
There are great books on learning algorithms that are also geared towards those types of interviews. One that I've found particularly useful is Cracking the Coding Interview
Probably your run-of-the-mill technical interview described in CTCI. They'd probably ask about your experience in .NET as well, like any projects you've done in it and how familiar you are with particular features.
You should complete all the problems that you can, because every problem solved and every line of code makes you a better programmer. Don't worry about whether or not it took you 30 minutes or 6 hours, what's important is that you solved the problem.
On top of that, read other people's solutions to the problems you solved! Then you'll learn what other tools you have in your toolbox to use. For this, I highly suggest /r/dailyprogrammer and "Cracking the Interview".
And it's important to make your own projects. Have your own ideas, and implement them. I make games, I don't really care if people play them, but the point is that the process makes me better.
There's this book called "Cracking the coding interview" which is very popular. I actually had questions straight out of this book while interviewing for some companies. On Amazon: http://www.amazon.com/Cracking-Coding-Interview-Programming-Questions/dp/098478280X/ref=sr_1_1?ie=UTF8&qid=1420949854&sr=8-1&keywords=cracking+the+coding+interview
If you're a software engineer or your tech questions are coding related, there's a book called "Cracking the Coding Interview" that has a bunch of good examples of questions and their solutions. I don't know if there's a similar book for other engineering fields.
You may not be answering the questions correctly or you may be approaching the interview in a less than optimal way. For instance, when you're figuring out a response to a technical question, do you explain your thinking (think out loud)?
It would probably be a good idea to thumb through Cracking the Coding Interview to get a handle for the technical jazz.
However, even if you dominate the 3-5 rounds of interviews, you'll still need to contribute dev skills each week at work. Your background may be more similar to an IT curriculum than CS. Computer Science is a major that hardwires some programming fundamentals into the minds of potential success stories and weeds out those who can't handle it. If you want to grow your dev knowledge, get a couple highly recommended books from Amazon. If you want to train your dev intuition, install a couple IDEs, explore some source code of open source projects, and practice creating your own applications--starting small and building to bigger, more flexible and resourceful programs. Where some developers fall short is debugging, so you might want to play around with the debugger in MS Visual Studio 2010/2012. Then again, that IDE costs several hundred dollars and I'm sure Microsoft frowns upon pirating.
Good programming languages to be fluent in (or at least have a good grasp of) are V/C++, C#, and Java, all three of which are tightly related. If you already know one, the other two should be a breeze to pick up. If you're already confident in developing with those languages, move on to learning about libraries and resources you can use in your projects. If you're bored shitless, maybe learn a bit of VB? Learning to knit may prove more useful though.
Good luck mate.
Don't. Do not under any circumstances say you would work for them over all other choices. There's a few reasons for this.
This isn't necessarily done on purpose, but I've seen it happen first hand too many times to count. It's almost like the "bad-boy" dilemma in dating- the guys who seem farthest away to reach are usually the most in-demand.
Instead, communicate your passion through the knowledge you have about their company. Talk about their things they've done you admire, ask them questions about how the framework they use and why (Do your research, don't say anything obvious!). If there are company github projects, read through them all. Try to get an idea of what they might be working on next and why.
In a phone interview your goal is not to get the job, just to get to the next interview. Give them what they need without sending across any red-flags. Really look closely at the job description and make sure you check each criteria. Have prepared answers for questions like: "Tell me about yourself," "Where do you see yourself in 5 years," etc.
I'd also recommend buying "Cracking the Coding Interview" if you have some time to prepare: https://www.amazon.com/Cracking-Coding-Interview-Programming-Questions/dp/098478280X
It's extremely helpful.
As anyone working in tech will tell you, landing a job/internship can be attributed to some combination of past work, interview practice and luck.
Some good resources for interview practice are https://www.hackerrank.com/ and https://coderbyte.com/. There's also Cracking the Coding Interview, which is a must have for any technical interview prep.
To find a side project to work on, I would suggest trying to solve a small problem you have in your daily life with software. For example, maybe you want to brush your teeth for longer, or remember to do something everyday. A project like this will allow you to both write actual code, but also talk about your process with deeper understanding to interviewers.
Besides that, there are other great online resources that can help you learn more nuanced aspects of software engineering like https://egghead.io or https://doyen.app.
Check out this book Cracking the Coding Interview . It’s definitely worth it.
Thank me later!
Acabei a licenciatura há 3 dias atrás e vou trabalhar para o UK no dia 1 de Agosto. As portas abriram-se por ter feito um estágio de verão (no verão passado) com esta empresa e eles terem gostado e decidido avançar com uma proposta. Para mim esta é a forma mais fácil de conseguir sair (agora para ti já é tarde, infelizmente).
Tens vários caminhos a tomar. Se quiseres ir para os Estados Unidos, especialmente para Silicon Valley, tens de ter em mente que as entrevistas são puxadas (em termos de algoritmia, estruturas de dados, desenho de sistemas...) mas que financeiramente se fores aceite vives muito mas muito bem. Se for esta a tua visão aconselho-te vários livros, em especial o Cracking The Code Interview e vários websites de preparação como Codeforces.
Por outro lado, se quiseres ir por exemplo para o UK, Alemanha, Holanda esta componente de algoritmia não costuma ser tão avaliada. Geralmente tens uma entrevista mais técnica e possivelmente algo mais prático para fazeres durante uns dias e depois mostrares o que fizeste. Se preferires esta vertente, tens aqui uma lista com centenas de empresas que seguem este conceito.
Existem vários recursos para encontrar estas empresas. Por um lado recomendo a Landing Jobs para veres várias ofertas. Um truque que podes tentar é começar por spammar as empresas que encontras e que gostas a propor ires trabalhar com eles no Verão (embora agora já comece a ser tarde!!) e se eles curtirem de ti de certeza que te convidam a ficar. Sei de várias empresas que estão há meses e meses a tentar contratar e não conseguem arranjar pessoal...
Quanto à situação do mestrado, sinceramente pelo que tenho visto as empresas não ligam nada, mas posso estar enganado.
De qualquer das maneiras, não tenhas medo em mandar montes e montes de emails nem que seja só a perguntar se têm oportunidades para recém-licenciados ou para estágios de verão (remunerados claro, não há cá exploração). Vais ficar surpreendido com a quantidade de empresas que te vão abrir a porta.
Qualquer dúvida apita!
I said "How much does it matter?" not "It matters exactly zero."
But alright, let's follow your idea for a bit, just for fun...
It'd take more than a short course -- you already skipped algorithms. And no, you still don't memorize FizzBuzz -- when people start doing that, interviewers find alternatives anyway -- the point is to get them to where a problem like this really is easy.
There's already a bit of a cottage industry around that idea, though, with its own self-help books and "boot camps" and everything. The problem is that a random batch of high-schoolers won't actually be able to solve these problems. Last time I was in school, data structures alone weeded out at least half the class -- not everyone can actually do this. Or at least, not everyone still wants to, once they know what they're getting into.
So what you're suggesting, really, is that I hire 5x more people than I actually need, so I'm paying more like $100/hr per decent programmer I actually get... and then pay for a CS education for them for the first year or so, knowing I'll end up firing most of them. Wow, I'd be rich.
And then, once I filter it down to the handful of high-school kids who can balance binary trees and sort linked lists and such in their sleep, who are actually capable of coming up with novel algorithms to solve hard CS problems, I couldn't keep paying them $20/hour for very long, because they can now pass an interview at any of the Big Four and be making $100k+ base salary, before the stock grants and benefits.
So basically, you invented a trade school, only I pay them instead of the other way around.
Resolve estos problemas
From what I've see lurking around here, this books seems pretty useful
If you don't wanna spend the money, I'm sure there are pdf downloads avaliable online
You misunderstand me, there are books to help coach you to pass interview tests. For example:
But thanks for offering an actual critique of my post.
Here is a book that will help you with those tech questions during interviews: http://www.amazon.ca/Cracking-Coding-Interview-Programming-Questions/dp/098478280X
Cracking the Coding Interview
I had 16 technical interviews within a month and this book saved my ass for all of them. I'm just worried on how long of a timespan you have. Prepare immediately!
Facebook, Google, most swe roles at Microsoft, Uber, Twitter, Snapchat (all have seattle offices)
Read, practice, go forth and get a better job: http://www.amazon.com/Cracking-Coding-Interview-Programming-Questions/dp/098478280X
*CTCI - Cracking the Coding Interview http://www.amazon.co.uk/Cracking-Coding-Interview-Programming-Questions/dp/098478280X
Incase it's a technical interview: Cracking the Coding Interview
This book is pretty good: http://www.amazon.com/Cracking-Coding-Interview-Programming-Questions/dp/098478280X
Check this book (http://www.amazon.com/Cracking-Coding-Interview-Programming-Questions/dp/098478280X) out. It seems to cover the interview "game" pretty well. Haven't personally gone through it yet :P but the reviews seem quite good!
> pick 2-3 locations in the US where you would like to look for jobs. Search craigslist in those areas as well as finding a recruiter in that area who will "work for you" in connecting you to local companies.
I have family in California, although right now, I'm not fussed where I live/work. I'll do some research into job markets of various locations.
> You're a recent grad, I know this sub likes to talk about internships/personal projects a lot, but they are not necessary unless you a targeting a very specific type of company (big 4 and their ilk). Do read up and practice with http://www.amazon.com/dp/098478280X/
I've only been to a couple of interviews, but neither required a coding part. Given they were for a pen tester and for a sys admin. Are coding questions popular across most jobs? Or mainly in software development?
> Conferences are a great way to make connections, if you can't make it to the conferences themselves, look at whose speaking at them and follow them on twitter / read their blogs.
Networking is something I really want to practice and do more of. I'll keep trying and working at it.
> The market can be unpredictable, you best bet is just applying to as many places as possible. Study for the coding interview, practice answer problems on a white board either in a language you are comfortable in (if you don't have one now, practice) or in pseudo code.
I struggle to apply for a lot of positions because I prefer to research a company and tailor my CV. It can take me as much as an hour. I suppose it's a practice makes perfect kind of deal. I'll keep working at it.
> nope, certs are useless unless you want to do weird enterprisey stuff, in which case you would know which ones exactly you would need.
I had often heard they can just be HR filters. I'll keep that in mind, if I continue running into trouble I'll look into them more, even if it's just to prove that I still have the knowledge.
Thanks for the great advice, this is a wonderful start. You've given me a better direction and cleared up a lot of my questions. Cheers
Here are some extremely good books for getting ready for Computer Science/Software Developer interviews:
Cracking the Code
Programming Interviews Exposed
Elements of Programming Interviews: The Insiders' Guide
Also if you want to build a programming portfolio you could create an account on Github and post samples of your code and other projects. Heck you could go through old textbooks and create code and post that up.
Additionally a popular, although paid, resource is pluralsight which has a $29 monthly subscription with tons of Computer Science topics and programming languages. I emphasize that pluralsight is optionally though. There are many free resources available.
Good luck! You can do it!
I initially took a look at the CS curriculum of my state college and see what classes those students had to take and, more specifically, what books they had to read. Using libgen.org, I was able to download a majority of those books for free. I started out learning C and Python, then went on to C++ and Java as well as learning about data algorithms and structures and some other CS concepts.
I originally wanted to get into iOS development because I knew iOS devs got paid way more than Android devs from their personal apps. Unfortunately, the barrier to entry to developing for iOS was (for me) expensive at the time ($100/year to submit apps + the price of a testing device). So, I instead looked into Android programming ($25 one-time developer fee and you can get a decent secondhand testing device for less than $100). I learned Android programming using Big Nerd Ranch's book which was very useful resource to learn Android programming from scratch. My first app was a grade-taking app which worked functionally but looked atrocious to the point where I eventually took it down from the Play Store (though I may redesign it using Material Design and put it back up one day).
From there, I just continued to refine my Android skills by building more apps, each one more complicated than the last. I eventually got into iOS development (again, from using Big Nerd Ranch's books on Objective-C and iOS programming) and just used friends' iPhones as testing devices.
As to how I got this programming job, thing is, I didn't go looking for it. A tech recruiter contacted me on LinkedIn to tell me about this job and I decided to flirt with the offer. I didn't care much if I got the job or not, programming was just a hobby to me and I honestly didn't think I was hirable anyway. To my surprise, they did offer me the job though, despite how I stumbled on their interview questions (questions about hashtables and arrays, things I feel a CS graduate could easily answer). I think it's that they really needed a guy who just knew his way around Android and they were willing to ignore my weaknesses in some CS fundamentals.
Since then, I feel like my programming abilities have expanded ten-fold. I've learned so much from my coworkers that have been doing this for years, and to help with any future job interviews, I've been studying books like Cracking the Code Interview, which actually has helped me in recent job interviews I've been having, both with Big 4 companies and non-Big 4.
Get this book and come up with Java solutions to the questions. Might help you get a job some day, as well.
Depends on your interviewing skills. Here's the cheat code bible
Check out a book called Cracking the Coding Interview
Here are some links for the product in the above comment for different countries:
Link: Cracking The Coding Interview
This bot is currently in testing so let me know what you think by voting (or commenting).