(Part 2) Best products from r/learnprogramming
We found 357 comments on r/learnprogramming discussing the most recommended products. We ran sentiment analysis on each of these comments to determine how redditors feel about different products. We found 1,804 products and ranked them based on the amount of positive reactions they received. Here are the products ranked 21-40. You can also go back to the previous section.
21. Refactoring: Improving the Design of Existing Code
- Addison-Wesley Professional
Features:
23. Cracking the Coding Interview: 189 Programming Questions and Solutions
- Careercup, Easy To Read
- Condition : Good
- Compact for travelling
Features:
24. The Practice of Programming (Addison-Wesley Professional Computing Series)
25. The Clean Coder: A Code of Conduct for Professional Programmers
- Prentice Hall
Features:
26. Clean Architecture: A Craftsman's Guide to Software Structure and Design (Robert C. Martin Series)
27. The Elements of Computing Systems: Building a Modern Computer from First Principles
- MIT Press MA
Features:
28. Effective C++: 55 Specific Ways to Improve Your Programs and Designs (Professional Computing)
- Addison-Wesley Professional
Features:
29. HTML and CSS: Design and Build Websites
- HTML CSS Design and Build Web Sites
- Comes with secure packaging
- It can be a gift option
Features:
30. JavaScript and JQuery: Interactive Front-End Web Development
- JavaScript Jquery
- Introduces core programming concepts in JavaScript and jQuery
- Uses clear descriptions, inspiring examples, and easy-to-follow diagrams
Features:
31. The Little Schemer - 4th Edition
- [MULTI-FUNCTION]: This measuring tool has a quick-change button that changes between three measuring modes: inch, fraction, and millimeter to make conversion a snap during measurement.
- [PRECISION]: The electronic measurement range is 0” - 6” and 0 mm – 150 mm with a resolution of 0.0005” / 1/128” / 0.01 mm and an accuracy of 0.001” / 0.02 mm for precise readings in all your measurement needs.
- [QUALITY]: The body of the digital caliper is constructed using finely polished stainless steel with a knurled thumb roller and locking screw that ensures smooth sliding and accurate positioning when taking measurements.
- [VERSATILE]: Calibrate to measure inside, outside, depth and step with two sets of jaws and a probe as a vernier caliper.
- [LARGE SCREEN]: Each digital lcd caliper has an extra-large LCD screen for easy and clear readings for faster efficiency and accuracy on the job or at the worksite.
Features:
32. Grokking Algorithms: An illustrated guide for programmers and other curious people
Manning Publications
33. Programming: Principles and Practice Using C++ (2nd Edition)
- Addison-Wesley Professional
Features:
34. Code: The Hidden Language of Computer Hardware and Software (Developer Best Practices)
36. Patterns of Enterprise Application Architecture
- ✔ AMD FX-4300 3.80GHz / 4.0 Turbo Quad Core | 1 TB 7200RPM Hard Drive | AMD AM3+ 970 Chipset Motherboard
- ✔ 8 GB 1866 MHz Gaming Memory DDR3 with Heat Spreader | 24X DVD ±RW Optical | Genuine Windows Professional 10 64-bit
- ✔ GTX 750 Ti 2GB Graphics Card | 1 x DL-DVI, 1 x Display Port 1.4, 1 x HDMI 2.0b | 9 x USB (7 X USB 2.0; 2 X USB3.0)
- ✔ Wi-Fi Ready | No bloatware | Free Keyboard & Mouse | Monitor Not Included
- ✔ 1 Year Warranty on Parts and Labor | Lifetime Free Technical Support | Assemble in the USA
Features:
38. The Algorithm Design Manual
- More and Improved Homework Problems
- Self-Motivating Exam Design
- Take-Home Lessons
- Links to Programming Challenge Problems
- More Code, Less Pseudo-code
Features:
I've posted this before but I'll repost it here:
Now in terms of the question that you ask in the title - this is what I recommend:
Job Interview Prep
Junior Software Engineer Reading List
Read This First
Fundementals
Understanding Professional Software Environments
Mentality
History
Mid Level Software Engineer Reading List
Read This First
Fundementals
Software Design
Software Engineering Skill Sets
Databases
User Experience
Mentality
History
Specialist Skills
In spite of the fact that many of these won't apply to your specific job I still recommend reading them for the insight, they'll give you into programming language and technology design.
>I do have a textbook called "C: A modern approach" by King, but like I said before, I think it focuses more on the coding aspect.
Most books that focus on C are going to be about learning the language. If you want to learn low level stuff, you need to find books that focus on them (and they'll usually incidentally use C). The language itself is quite small and minimalistic in what it can do. Most heavy handed things like networking and GUIs require interaction with the OS.
Eg, if you wanted to do networking, you could use the Windows API or the POSIX socket API (POSIX being the standards that *nix systems follow -- and certain versions of Windows). Or you could use a higher level library like curl for cross platform support (and a wealth of nicer features).
>Can somebody please guide me on where to start?
Firstly, as much of a linux fanboy I am, I do want to make sure you know that you don't need to use Linux for any of the other things you wanted to learn (low-level programming, command lines, networking, etc). In fact, my OS class mostly used Linux, but we started out with a project using Windows threads (I guess the prof wanted us to see the difference from POSIX threading).
All that said, I do think Linux is something you'd want to learn and that a lot of low level things just seem more natural in Linux. But I'm biased. Linux fanboy, remember?
I'd start with downloading a Linux OS. Doesn't really matter which. I'd recommend going with Ubuntu. It's the most popular, easiest to find help with, and seems to be what most web servers are running, to boot. You can play around with the GUI for a bit if you want. It won't feel that different. Modern OSes sort of converged into the same high level ideas.
My favourite book for getting into the command line ever so slightly touching the low level aspects of OSes is Mark Sobel's A Practical Guide to Linux Commands, Editors, and Shell Programming. It will include some basic knowledge of Linux, but mostly focuses on the command line. But this is very useful because not only is the command line very practical to learn, but you'll end up learning a lot about Linux in the process (eg, by learning how everything is a file, how pipes work, etc). And arguably the command line a super big part of Linux, anyway. It makes sense as the first step.
Now, for the next step, you need to know C very well. So finish with your class, first. Read ahead if you have to. Yes, you already know if statements and functions and all, but do you understand pointers well? How about function pointers and void pointers? Do you understand how C's arrays work and the usage of pointer arithmetic? How about how arguments are passed to functions and when you'd want to pass a pointer to a function instead? As a rough skill testing question, you should implement a linked list for arbitrary data types with functions such as prepending, appending, concatenating lists, searching, removing, and iterating through the list. Make sure that your list can be allocated and freed correctly (no memory leaks).
Anyway, the next step is to learn OSes. Now, I said OSes and not Linux, because the Linux OS is a bit constrained if you want to learn low level programming (which would include a knowledge of what OSes in general do, and alternatives to OSes like Linux). But never fear, pretty much any OS book will heavily use Linux as an example of how things work and consequently explain a great deal of Linux internals. I can't recommend a class because mine was a regular university class, but Tanenbaum's Modern Operating Systems is a good book on the subject.
In particular, you can expect an OS class to not merely be focused on building an OS yourself (my class worked on aspects of OS101 to implement portions of our own OS), but also on utilizing low level aspects of existing OSes. Eg, as mentioned, my class involved working with Linux threading, as well as processes. We later implemented the syscalls for
fork
,join
, etc ourselves, which was a fascinating exercise. Nothing gets you to understand how Linux creates processes like doing it yourself.Do note, however, that I had taken a class on computer architecture (I found Computer Organization and Design a good book there, although note that I never did any of the excerises in the book, which seem to be heavily criticized in the reviews). It certainly helps in understand OSes. It's basically as low as you can go with programming (and a bit lower, entering the domain of computer engineering). I cannot say for sure if it's absolutely necessary. I would recommend it first, but it's probably skippable if you're not interested (personally, I found it phenomenally interesting).
For learning networking, Beej's book is well written. You don't need to know OSes before this or anything.
I'm a technical PM for two teams, as a well a contributing dev on both teams.
While the skills are definitely different from programming a few things I've found that helps:
A few books you should read:
In terms of sprint plannings, just remember it's a negotiation. You're not there to tell people what to do. Rather you have the stuff you would like done, but you negotiate with the team on what's possible and what's not. I've seen too many PM's get pissed cause their teams couldn't do 100% of what they wanted and that's not right. Rather a good PM, imo, brings options and lets the team decide how much they can handle. There have been times when I've gone into sprint plannings and non of items made it on the sprint, and that's ok.
Sorry for the long rant!
In almost every field, you're going to end up dealing with groups of things - lists of contacts, groups of users, categories of billing items, whatever. Having a deep understanding of arrays vs. (hash) sets vs. (hash) maps is huge, by far that's the most common decision I make on a day-to-day basis.
I think it's worthwhile to expose yourself to a bunch of specialized algorithms and data structures. You don't need to study them all super in-depth, but reading about them and maybe hacking them out in Python/Java/C++/whatever is a great learning exercise. I personally like "The Algorithm Design Manual" by Steven Skiena, (EDU PDF, Amazon). It's on the dry side, but it categorizes algorithms into a handful of types (sorting, graphs, combinatoric search, etc) which makes it great reference material for learning.
A handful of useful exercises, maybe useful:
If you can afford it I'd highly recommend this course on udemy. Its $35 but theres always tons of udemy coupons floating around. I've been working through it and it definitely has helped me get a better understanding of both the front end and back end in web development since there's code alongs, exercises, quizzes, and you even make a bunch of small websites as well as a couple of actual web applications. That being said I'm not affiliated with it in any way. Just sharing what Ive been using to learn and its been very helpful.
Also there's tons of books available both paid and free.
As other people have mentioned, Duckett's books on html, css, javascript, and jquery are very beginner friendly with colorful and easy to understand material.
This is a good one that I've been going through to learn about UI/UX and the overall look and usability of your website. It basically teaches you how to make your website more approachable to whoever is navigating it.
I don't think anyone else has mentioned it but Udacity also has tons of free content, a large majority of it being web development and programming courses.
Other than that you're honestly going to just have to start messing around in a code editor and see what does what. Come up with an idea and really just start trying to code it. It could be a small one pager or it could be the start of your web development portfolio. A big thing that I've come to learn is that when you decide that you want to build something and you have no idea what you're doing, grab a good old pen and paper and write down or sketch what you want to do. Sketch what you want your page to look like. Then figure out how to code it. And if you get stuck google is your best friend. Break down what you want to do into smaller manageable chunks, do one thing at a time, and don't be afraid to get your hands dirty. Being a computer science student, this is the best advice I can give you when it comes to learning this stuff.
Read these books to get to grips with the latest techniques and ways of working. As an employer I'd be extremely impressed if you'd read these books. They will give you a big head start when trying to move into the professional work environment. Most of them will apply to any programming language but they mainly use Java as the example language but it's very similar to C#. It's books like these that are the difference between a beginner and an expert, but don't forget when you start coding 9-5 with good developers you will very quickly pick things up. We were all in your position at one point, if you get these read it'll all be worth it in the end!
Coding
C# in depth - I've not read this one since I do Java but I've just had a quick glance. This should be pretty useful and it's a respected publisher. I think you should start with this one.
Clean Code - Great book which explains how to write clean concise code, this 1,000,000x. It doesn't matter what language you are using it should apply where ever you write code.
Cleaner Coder - Another Robert Martin book, this one is easy to read and quite short, it's all about conducting yourself in a professional manner when you are coding. Estimating time, working with co-workers, etc.. Another good read.
Growing Object-Oriented Software - This book is about writing code using test driven development. It explains the ideas and methodologies and then has a large example of a project that you build with TDD. I just read this recently and it is really good.
Head first design patterns - This book goes through essential design patterns when coding with an object orientated language. Another essential read. Very easy to read, lots of diagrams so no excuses to not read it!
Work Methodologys
Kanban
Succeeding with Agile
p.s
Start building stuff, get an account on linked in and state the languages you are working with. This will help as well because having something to show an employer is priceless.
Being fond of problem solving is a good indicator. Problem solving and executing a solution is essentially what programming is all about in the end. Pretty much any engineering degree for that matter. The good news is most STEM courseware is pretty much the same the first couple of years of college so you won't really have to commit straight away. Your classes will apply to multiple degree paths and having a few intro compsci courses under your belt will help in literally any major.
A computer science degree is (should be) geared to problem solving more than learning to write code. Writing code is the easy bit and the tech changes so quickly it is something best learned on the fly. You will be taking tons of math, studying algorithms, data structures, learning to play well with others -- that sort of thing.
Being fond of computers alone can lead one astray. The classic example is that liking listening to music doesn't necessarily lead to liking making music.
The Harvard cs50x extension course will give you a straight up taste of what an intro to CS class will be like in university. The pace is fast so fair warning.
A good armchair book is CODE. Nice overview of how computers compute.
It's a great career choice IMO. I've been at it for a long long (long) time with zero regrets. Along side getting to play with all the shiny bits, you can get a constant supply of feel good moments when you see your work actually doing something in the wild and seeing your work impact peoples lives in a positive way.
I have to say linux profiling has seemed to me to be a fast-moving target, meaning you'll get scattered results if you search. But, there's this which seems up-to-date: http://en.wikipedia.org/wiki/Perf_%28Linux%29
Then there's Ulrich Drepper's 'What every programmer should know about memory' (long series, but worth skimming at least, if your code is memory intensive. At least read about cache-coherency and cache-lines): http://lwn.net/Articles/250967
But the biggest thing is to get the algorithms right. Sounds like you want image-processing books. Also, GPUs are just absolutely the right place to do this stuff, and there are probably libraries already out there for it; speaking of which, did you know about OpenCV? It even has some stuff implemented on the GPU (as CUDA). I root for OpenCL, but the fact is, almost everything out there, libraries, and books, is written for CUDA.
> All the software is written in C++: I am interested in unlearning bad habits and writing better and easier to maintain code.
I suggest Effective C++ if you haven't read it yet. Also, Herb Sutter's 'Exceptional C++' series (a 'digest' version is C++ Coding Standards: 101 Rules, Guidelines, and Best Practices).
Never read it myself, but I hear 'Code Complete' is good. Maybe, too, Martin Fowler's Refactoring book - it shows lots of little awkward, problematic patterns and what to do about them, with good discussion. Each cleanly separated out - it will refer back and forth, but you can read the bits one-at-a-time. Good bathroom reading :)
Re: algorithms: Ugh, I don't know. It sounds like you'll want some metric data structures, dealing with space as you do. There's http://www.amazon.com/Foundations-Multidimensional-Structures-Kaufmann-Computer/dp/0123694469, and I don't know what else, maybe some Knuth? But probably, you should learn undergraduate-level data structures and algorithms, Big O stuff. Any used CS Data Structures + Algorithms book should help with that.
Do not fear spending money, as a former boss said, "books are free" ie they pay for themselves if they save you an hour's debugging later. Good luck!
> I just delivered a 20k lines/~50 pages project in AngularJS/Web API/PhoneGap without a single automated test.
Oh my... a few things:
First, I all but guarantee there are unforeseen consequences hiding in your code. I'm pretty sure you'll end up debugging something at some point that will boil down to "oh, I didn't consider an empty list", "oh, I got that boolean comparison wrong", etc... Sometimes it can get more complicated, as in "oh, I didn't consider the case that this concurrent routine terminates before that other concurrent routine". Testing is all about throwing out your assumptions about how you think the code works and validating how the code actually works. In a way, you are debugging now so someone doesn't have to later. And yes - your code contains bugs ;P
Second, to be testable, code needs to have a certain structure. I assert that well testable code happens to also be properly composed code. There are a lot of ways to blast yourself in the foot composition-wise. When you sit down and write tests, you might find that your composition is all over the place. It's surprisingly easy to write completely untestable code, and that's not something you generally want to get into the habit of doing.
Lastly, do you expect your $company to just take your word that "this works"? Unit tests are a demonstration of correctness. I'm sorry, but the harsh reality is that your mouth doesn't count for very much. So, either formally prove the correctness of your code, or write some tests.
I challenge you to take a few days and slap some unit coverage over your codebase. You will be amazed what you learn about your own code. There will probably be a good number of instances where you think "oh, I didn't think of that.." If you find it's difficult to actually test your code, you might think about the composition and how you can improve the testability of what you've written.
I very strongly recommend you read Beck's TDD. I'm not advocating for full-on TDD, but the book does a great job of explaining why testing is important and how you should organize a test.
Once you've got an idea of how to write unit tests, come back and ask about integration vs. end-to-end testing.
I would cross-post this to /r/cscareerquestions since that's the subreddit that's more career focused.
My recommendation is to start building a coding portfolio. Specifically set up an account on www.github.com and start posting some of your projects there. Basically how github works is after you set up an account you download the client and create a folder on your computer. Any code or documents you put into that folder and then "push" will appear online. This will allow you to have lots of code samples to show a prospective employer. Another good idea is to build your own website. There are a couple of good web hosts such as www.bluehost.com and www.nearlyfreespeech.net. I personally use www.nearlyfreespeech.net because it's very very cheap. (You pay only for what you use and since your website will primarily be used to show employers it will be a few cents a month.)
Once you have a website and Github you'll also want to start studying more and learning more and then creating personal projects. There are a lot of good places to continue learning programming. You could sign up on www.pluralsight.com for their $29 a month plan and then follow along with courses. Alternatively you could buy books about programming and go through them and upload code samples to Github as you go through them. (A strategy I use is to look at books on www.amazon.com and buy used copies or copies that are 1 edition older than the current edition, it is very realistic to get books for $4 including shipping and handling.) There are also many free resources such as www.codeacademy.com.
Some good books you could buy that will help you once you get job interviews are: Cracking the Coding Interview, Programming Interviews Exposed, and Elements of Programming Interviews. Out of these books "Programming Interviews Exposed" is the best for beginners while the other two are more meant to get you ready to interview at huge companies like Google or Microsoft.
As far as projects to do just pick some ideas and implement them. For me personally I made a website (www.cslearner.com) and created my own blogging software. There is better blogging software out there then the stuff I wrote for myself but it beefs up my portfolio and gives me something to talk about in job interviews. One idea may be to make some sort of CRUD application/website. CRUD stands for CREATE, RETRIEVE, UPDATE, DELETE. Since a lot of what we do as software developers is data manipulation you can create some sort of app or website that creates and manages information. In my case the first CRUD thing I created was a comment section using PHP and MySQL. Literally all it did was allow people to post comments on a website and then a SELECT statement would display all the comments that people had left. You could do a similar project. The cool thing about CRUD is that you can build apps using a huge assortment of technologies. You could create a CRUD app using ASP.NET, server side Java(JSP), PHP and MySQL(the LAMP stack), or a bunch of other technologies.
Also a huge thing is to apply for jobs even if you don't feel very ready. Check out this YouTube video in particular. Employers put down a wish list of things they'd like in a candidate but know in advance they won't get everything they'd like. If you seem like someone that could learn the technologies they may hire you even though you don't know everything yet. Also you'll want to apply to a lot of places. I've had 15 job interviews so far (I'm graduating this next April) and I have no job offers yet. This means I have to apply to even more places. Even though Computer Science is a very high demand field job hunting is still hard and you still need to put out lots of applications.
Code is also a good book. If you want textbooks:
This is a good one for computer architecture. And there's a companion course/website at www.nand2tetris.org. https://www.amazon.com/Elements-Computing-Systems-Building-Principles/dp/0262640686/ref=ed_oe_p
I like this one as far as operating systems go: https://www.amazon.com/gp/aw/d/1118063333/ref=dp_ob_neva_mobile
For learning programming, I would check out courses at www.udemy.com. But be mindful of ratings & reviews because the quality of courses can vary pretty drastically. But I've had good experiences there. www.udacity.com also has great courses. They offer paid nanodegrees but you can take every individual course free of charge. www.teamtreehouse.com is another good website
If you're interested in networking, this is a good book for starters: https://www.amazon.com/gp/aw/d/0768685761/ref=dp_ob_neva_mobile
Any A+/Network+ certification books or courses would also be a great way to learn networking and computer hardware
Those are pretty big topics in tech & computer science. There's a ton of stuff to learn. I've been studying this stuff for probably 2-3 years and sometimes I feel like I've barely scratched the surface. Let me know if that helps & if there are other topics you'd want book recommendations on! :)
There's OO design, and there's particulars as to how to implement things in C++. I'm totally with unapersson as to, that the Os you make are as often conveniences or design helpers as representing real world objects. Ie that it's implementation objects. I don't remember how much OO design advice Effective C++ has, but it's a good book to get someone to intermediate C++ programmer. C++ Coding Standards by Herb Sutter and Andrei Alexandrescu talks at a fast clip about a lot of taste and design issues; I haven't looked at the 3rd edition of Eff. C++ but, from earlier editions, the difference is that Coding Standards is more dense, and sophisticated; Eff. C++ more basic (from what I can see, Coding Standards does cover the same material as Eff C++, but in a very compressed form, only the most minimal discussion; maybe not what you want when you're seeing the material for the first time.
As for pure OO design, I've heard that straight-up Grady Booch is still the best, but I have no experience of it.
I will say, if you want to be good at C++, you'll have to spend money on books (but get your company to buy them perhaps - compared to programmer time, books are free), and time on reading them; there are a lot of best-practices, technicalities and real pitfalls that are not immediately obvious.
edit:
> Also, should I be studying data structures/algorithms in unison with OOP?
Definitely. Have you learned the basics, stack, tree, queue, hash tables (or set, map, vector, unordered_set, unordered_map)? You /must/ know these. (priority_queue and list too, less so maybe.) If you can though I'd read (somehow) about other data structures, spatial ones especially in your case; they can really make your program more efficient and thus able to do more.
edit edit:
I have to say, the above books are for long-lasting code; probably for games your best bet is to look at how other programmers write their games (smaller, simpler, even in other languages - it can be hard to understand large, sophisticated codebases) and, just the necessary experience you gain from writing your own.
Nice curated list, but I'd recommend adding a few more interview prep sites from this list:
The 10 most popular coding challenge websites for 2017
Because I would definitely recommend someone to check out TopCoder, Coderbyte, and Codewars if they are preparing for an interview.
Here are a few resources I've also used when preparing for interviews (taken from previous comments of mine):
I, too, am learning partially through Free Code Camp. What's great about them is that they give you (a) a structure of topics to learn in a certain order, and (b) actual projects to work on.
What you cannot do is learn exclusively through FCC. I see them as a starting point. They will link you to MDN documentation in their challenges, but don't rely on those either. MDN is written for people who already have some familiarity with JS and may not be readable if you do not already understand the basics of JavaScript.
If you're looking to stay with free resources, try looking up YouTube videos that have a high number of views and positive ratings. I stumbled on this channel and have used it a few times. YouTube videos will help you see exactly what the code is doing.
If you're willing to pay for a book, I have found Jon Duckett's JavaScript & jQuery book very helpful. Also try checking out his HTML & CSS book, though I haven't used it much as I am already pretty familiar with HTML (less so CSS, but I am familiar enough with the basics to rely on Google for anything else I need).
Feeling overwhelmed at FreeCodeCamp doesn't mean you'll never learn the concept. What it does mean is that you need to take a step back and really learn the concepts by checking out as many outside resources as you can, then go back to their challenges and complete them.
Good luck :)
Junior UX person here. Not much of a programmer myself, but it's sufficient for my needs, as I am only doing front-end design when I dabble with code. There is a multitude of ways to learn how to code, but generally speaking, I find that practicing in small repetition helps the best to retain and absorb information. When you are doing a small code example, try to rewrite differently and see how it works in each of those ways. I also recommend coming up with a small project that you can work on (design and putting a personal site live, for example), as opposed just doing the practices, that way you are presented with a real world environment that contains restrictions and possibilities.
Do you draw? It might help to learn how to draw well, which will help you illustrate designs and potentially become a fun hobby.
Some beginner level books I recommend:
Also, you might want to sign up for this course track offered by Stanford.
Lastly, learn how to meditate (or just ways to maintain inner peace in general). It will help once you enter the industry.
Congrats on landing the interviews. I don't have any specific advice, but perhaps pick up the book "cracking the coding interview" and give it a once over. It offers some good technical and non-technical advice that may be helpful.
You're probably right in saying that you're not going to become an expert by reading books over the next few weeks. I think the best thing you can do is gain as much knowledge (within reason) in the areas you think you are deficient in.
The ideal candidate doesn't necessarily posses all of the skills at day 0, they're going to be judging you from a standpoint of whether or not you have the prerequisites to grow into the position as well. You've already proven to them that you have talent. So, in addition to last minute gap filling, also focus on your soft skills and your ability to demonstrate a growth mindset... it may take you further.
These are good, but I would say they're actually better for learning C++ rather than branching to higher level concepts. C++ is one of the easiest languages to implement best practices with and it's intuitive if you're a good programmer. The language and standard itself promotes cleverness and conciseness.
Some books I would suggest for branching to higher level C++ would be Effective C++ and More Effective C++.
Both are wonderfully written and relevant across standards. It focuses on bigger picture C++ rather than exactly current standards.
My professor recommended the book "Modern Operating Systems" for one of our classes. It's certainly not for everyone, the class was split about 50/50 on whether they absolutely hated it or loved it. There are copies to be found online if you're interested in checking out the writing-style, but I seriously recommend buying it if you do enjoy it as it is clearly a product of passion.
It's been an absolutely fantastic resource to me and although, as the name implies, it mostly focuses on operating systems, they manage to strike a seemingly perfect balance between explaining concepts of operating systems while still giving a thorough review of what role the actual hardware plays in the mix and how that works as well.
32 here, I was a high school teacher for 6 years. I learned quickly that it was not what I wanted to do long term. I started dabbling in programming and quickly fell in love with it. This past year I attended a year-long program (7 months 9-5 classroom, 5 months internship) for full stack web development. I had a well-paying position at a top tech company lined up before completing my program and am very happy with my career change.
My best advice would be to go for it! There is a huge demand for devs and while I understand it is easy to look at your age as a boon many employers will see it as a positive attribute.
Tips:
If you're mainly interested in Java, I would recommend Effective Java by Joshua Bloch. It's a great guide with recommendations for best practices in the language.
For C, the best book is The C Programming Language by Kernighan and Ritchie. I would recommend that you read that before ever looking at C++ because C++ is based on C. In fact, it's such a great book that I would recommend reading it before you read anything else on any language. You can skip the file system and Unix stuff though.
For C++, I have never found a good beginner book, so my suggestion would be that after you read the above C book, read the stuff in this tutorial and then read Effective C++ by Scott Meyers. It's another best practices book.
For Python, I've heard good things about Learning Python but I don't really know. I actually found it more useful to just go through the Python tutorial and then start making fun little scripts.
Hope that helps!
Umm this might become specific...
So Clean Architecture got me thinking a lot about code structure at a macro level, which is really important for development. It's a good beginning to understanding architecture but definitely not a definitive reference.
I would likely suggest any book that helps you understand your tech stack at a deeper level. If your goal is to say, be a lead developer, for example. Often the role of a lead is to support team members who are stuck.
So understanding the tech stack is important. For me, I got C# in a Nutshell. (I would suggest you getting the nutshell equivalent of your tech stack). It's important and it let's you understand what's happening under the hood.
Learn Algorithms in 24 Hours was a nice little primer on data structures and algorithms. While by no means a "revolutionary" book, it was useful in understanding what structures solved which problems.
So here's me answer:
If you're trying to get better at your stack: Get the Nutshell version of your language. Or buy a book on the framework your on.
If you're trying to just be a better computer scientist... I would learn Design Patterns (you noted this), then Architecture (Clean Architecture and then Patterns of Enterprise Application Architecture) then you're going to need to understand how to solve scaling problems. So Data Structures and Algorithms. This is hard because what book you want depends on your comfort with math.
For me, the biggest impact book, was design patterns. Then it was all the tech stack stuff that helped. Then finally, architecture books. The Martin Fowler architecture book was useful with design and thinking about how to handle saving data.
But it's really going to boil down to what you want to do with your career long term.
Despite their age, the MIT lectures were great. If you're good at math and enjoy proofs this is the class for you. Same thing with the CLRS book. One of the best books on DS & Algos out there, but it's so dense it'll make your eyes glaze over, unless you love proofs and highly technical reading.
To get your feet wet, Grokking Algorithms is a good book.
A lot of people recommend Princeton's Algorithm Course. I took Algorithms in school already, but I'm probably going to take this course to round out my knowledge.
EDIT: special shout out to geeks for geeks. Great Website
I see that you've already taken Colt Steele's courses on Udemy. I'm guessing you can work on the front as well as the back end and work with APIs. At this point, a bootcamp is a better option imo. I'm not from the US, so I can't recommend you any. I'm assuming that you're familiar with the basics and you should definitely look into learning frameworks now. It can get overwhelming to select one amongst the plethora of available options, so pick one of the popular ones, you can't go wrong with it. ReactJS for the front end or NodeJS for the back end would be great imo (especially since you're familiar with JavaScript at this point). Udemy courses are cheap and if you follow along, you'd have multiple projects under your belt, that should definitely help you in getting a job. If time permits, you should learn auxiliary subjects, especially Algorithms and Data Structures. That would really help you in your interviews. Eventually, get that Gayle Laakmann book. So, even though you have a long road ahead of you, prioritize and focus on the parts that can get you a job in the shortest time. Maybe work on your front end skills first, get a job and work through the back end or theoretical stuff later. I'm sure you can do it if you keep at it! Good luck with everything 👍
It's good to point out that all of these things are my opinions and not facts written in stone. However, I've seen others who share my point of view.
Teaching C++ correctly is an incredibly difficult task. It's difficult to overemphasize how difficult it is. Java not as much, but if put in contrast with JS and Python, it'll seem way more difficult.
((begin edit)) And just to be clear, I really meant teaching, and not learning. Although I believe learning C++ is more difficult than learning Java, JS or Python, I was referring to teaching. Instructors have to decide which languages to teach. Choosing C++ adds a large burden for them to deal with. Choosing JS on the other hand, doesn't add as much (it's a lot less in fact). ((end edit))
There are many issues which contribute to that. Here are some of them:
The fact that you can run JS in a browser is a big win. You can almost readily teach people how to do graphics apps (canvas for example), which makes learning much more interesting. Since that's not the case for python, I'm not sure this is a good reason, but the places which pick JS consider this sort of thing.
The issue is that a beginner python/JS programmer can do a lot more than a beginner C++ or Java programmer. When you go to intermediate levels, people in the js/python area will seem to have a unfair advantage IMO.
I happen to know these languages (let's quote that "know" a few times since we're talking about C++ here =D), and my opinion is that in most of the cases, C++ and Java aren't needed. In fact, for most cases, I believe JS is the way to go these days.
Just to be clear again, though, I'm only talking about my experience, and the cases that I've seen/worked with.
About learning resources...
For java, I firmly believe you can learn lots from the online tutorials (http://docs.oracle.com/javase/tutorial/). They're pretty good.
For C++, I'd recommend you the two books by the creator of the language. One teaching programming concepts using C++, and the other being kind of a "user friendly manual for C++".
I was in your situation a few months ago! I finished Codecademy and didn't know where to go next. I did Shay Howe's HTML/CSS course, which was great because you follow along step-by-step, but are continually building one project so you end up with something nice. Now I'm working through a free Udacity course (not sure yet whether I'd recommend it) and then I'm going to try the Code Camp or Odin Project like a few people here recommended. Also, I bought myself this book, its awesome.
Interesting!
Looks to me that you can "feel" what good code looks like but you're not able to rationalise it enough for you to write it on your own.
Couple of suggestions:
When you see elegant code, ask yourself: why is it elegant? Is it because is simple? Easy to understand? Try to recognise the desired attributes so you can try to reproduce on your code.
Try to write really short classes/methods that have only one responsibility. For more about this, search for Single Responsibility Principle.
How familiar are you with unit testing and TDD? It should help you a lot to write better designed code.
Some other resources:
This is the example that helped me understand recursion.
def sumlist(xs=[]):
if xs == []:
return 0
else:
return xs[0] + sumlist(xs[1:])
This is a recursive summation function. There are better ways to do it, but this is the most readable. Basically, it will return
0
if the list is empty; otherwise, it adds the current headof the listxs[0]
to the value returned by the application of the function to the tail of the listxs[1:]
.x = sumlist([1, 2, 3]) # 0 - Initial call.
xs == []? nope # 1 - Check terminal condition.
1 + sumlist([2, 3]) # 1 - Add current head (1) to value of next call.
xs == []? nope # 2 - Check terminal condition.
2 + sumlist([3]) # 2 - Add current head (2) to value of next call.
xs == []? nope # 3 - Check terminal condition.
3 + sumlist([]) # 3 - Add current head (3) to value of next call.
xs == []? yes # 4 - Check terminal condition.
0 # 4 - Return 0.
3 + 0 # 3 - Higher frame: add 3 to 0.
3 # 3 - Return 3.
2 + 3 # 2 - Higher frame: add 2 to 3.
5 # 2 - Return 5.
1 + 5 # 1 - Higher frame: add 1 to 5.
6 # 1 - Return 6.
x = 6 # 0 - Assign the result of the recursion to x.
If you're interested in this, the book The Little Schemer is pretty good.
Ooooh you're a super new :)
Many people hate it but w3schools can get you started:
If you want to buy books check out:
It's super noob friendly and the book looks amazing.
Note for others: The same authors have a book on JS. Again it's mostly introduction material but it's fun to flip the pages :)
(Not affiliated to the authors).
Here's my list of the classics:
General Computing
Computer Science
Software Development
Case Studies
Employment
Language-Specific
C
Python
C#
C++
Java
Linux Shell Scripts
Web Development
Ruby and Rails
Assembly
Yikes! Well it's going to be pretty hard for you to really understand how to do Python without actually coding in it.
The one thing you could do though is get a book with examples and write them down and try to modify the examples to do something a little extra while at work.
I find the http://www.headfirstlabs.com/books/hfpython/ books the absolute best books for almost anything if you are just starting out. The Java book is especially fun!
I know this isn't exactly what you are asking but it might be a good resource for you to start using.
Another great book that will teach you parts of the theory, and has really good examples on how computers work is http://www.amazon.com/Code-Language-Computer-Developer-Practices-ebook/dp/B00JDMPOK2/ref=sr_1_1?s=digital-text&ie=UTF8&qid=1457746705&sr=1-1&keywords=code+charles+petzold .
That really helped me think about computers in a more intuitive way when I was first starting. It goes through the history and to what an adder is and more. I highly recommend that book if you want to understand how computers work.
First time see that site, but I would recommend reading:
This is a list of books I am intending to read as soon as I read through some other books.. A list I created from reading this and some other subreddits daily, so probably this should cover all your need on Clean Coding.
If anyone know any more books well worth reading I would be really glad to hear about them!
Senior dev here who is on the other side of things. One way to approach these situations is to try and approach the problem more from the business case. I’m not sure of your work culture, but you should be bought in as to why a deliverable is time sensitive and what there is to gain by delivering this week vs a week or two later. If people don’t have reasons, they need to be held more accountable for the longer term delivery. Tech debt is a slow killer. You’d be surprised with how much you can push back:
How is this feature being measured?
What is success criteria?
What are the next steps if successful? If unsuccessful?
What are we not doing in order to do this task? Is this the most impactful thing we can spend our time on?
Also, understand that any system is due for a rewrite every 4 years or so. No matter how clean you write, you’ll eventually have to refactor anyway. You defiantly want to maintain something workable, but keep in mind there is no such thing as a permanent solution.
And finally, Great book ok how to make small iterative improvements as you go.
Working Effectively with Legacy Code https://www.amazon.ca/dp/0131177052/ref=cm_sw_r_cp_api_i_Td0QDbFQKYV3T
You need this: http://en.wikipedia.org/wiki/Software_design_pattern
More specifically you need to develop good understanding not only of what design patterns are but also...
These things can take a long time to get used to. Object Oriented is a very useful paradigm to work in but it is, in itself, a design pattern. It is also useful to know when you are better off not doing things in an object oriented way.
But probably the most important bit of advice, and the thing that helped me to properly understand OOP is unit testing, and how to do it properly. If you haven't yet read it, then read this book and apply what it teaches you in your projects. Learn to use a good testing framework and a good mocking framework (in c#, for example, my preference is for Moq and NUnit) and learn to express yourself in test code. Learn also about dependency injection. These testing techniques, and the TDD story, will guide you not only in writing the units of your project, but also in architecting it and letting testability guide the design. Once you see how the design of your code is affected, you'll start to understand OOP a lot more, and also the finer points of the design patterns you want to implement.
Good luck :)
Here's a really good book by someone who used to conduct coding interviews at Microsoft, Amazon, etc.
Cracking the Coding Interview
Still, it's not likely that you'll see the same exact questions on an actual interview. Just practice a lot and get comfortable with solving problems. That will help you when it's time to code on-the-fly at an interview. Also, it's more important to talk through the solutions. Coming up with an innovative, elegant, or efficient solution with pseudocode is more important than getting the syntax exactly right in a particular programming language.
> An understanding of design concepts is handy, but you don't need to be able to come up with the design yourself.
I think this line really sums it up best. You are likely to be tasked with creating some mock-ups, or adding a feature after the designer(s) have more or less moved on to the next project. In the case of the former, having some basic understanding of layout and design will help you create a usable product, even if it lacks polish.For the latter, being able to interpret the existing design, and extracting a few rules from it will let you deliver something pretty close to a finished product.
Working as a contractor or as part of a small team you sometimes have to wear multiple hats. I'm mostly a backend developer, but have (and still do) work on the front-end. There are a couple of books I have read and recommend for people in that situation. Neither will make you a full-blown designer, but do cover the essentials that anyone working on the front-end really should know.
Don't Make Me Think: A Common Sense Approach To Web Usability
The Non-Designer's Design Book
Inside the Machine, visually illustrates concepts within a computer system so beautifully that it will make you cry.
Also, TeachYourselfCS, not really a book but a list of links of videos and books that will help you grasp various sections of CS.
Grokking Algorithms, not a book based on CS, but it's a really good book on algorithms with funny illustrations that will help you through.
The other books that have been mentioned like Clean Code for example are a must read!
Honestly? Mostly youtube and udemy tutorials. Here below is my copy pasta of C#/Unity stuff which I post pretty often on /r/learnprogramming and /r/learncsharp . I only need to find a moment one day and add some computer science theory links.
Free C# ebook
• http://www.csharpcourse.com/ <- The download link is under 'here' at the end of the first paragraph.
If you want youtube tutorials:
• https://www.youtube.com/playlist?list=PLGLfVvz_LVvRX6xK1oi0reKci6ignjdSa <- apart from C# this dude has also A LOT OF other tutorials on many other languages.
• https://www.youtube.com/watch?v=pSiIHe2uZ2w <- has also pretty good Unity tutorials.
• https://scottlilly.com/build-a-cwpf-rpg/ <- learn WPF (desktop application with GUI) by making simple RPG game.
• https://www.youtube.com/user/IAmTimCorey <- This guy is also good, but I dislike his coding style and that he uses a lot of nugets instead of writing stuff himself.
Book reference guide:
• https://www.amazon.com/C-7-0-Nutshell-Definitive-Reference/dp/1491987650/ref=sr_1_1?ie=UTF8&amp;qid=1547990420&amp;sr=8-1&amp;keywords=C%23+in+a+nutshell <- But treat is as a language reference guide, not a programming learning guide.
Text-based tutorials
• https://www.tutorialspoint.com/csharp/index.htm <- C#
• https://www.tutorialspoint.com//wpf/index.htm <- WPF (GUI programming)
Udemy - wait for $10 sale which occurs at least once in a month:
• https://www.udemy.com/csharp-tutorial-for-beginners/ <- for C#, dude has also more advanced tutorials to choose from.
• https://www.udemy.com/user/bentristem/ <- for Unity
Do not move to Unity or WPF before you get good grasp on C# syntax and OOP concepts.
Coding style (read after getting good grasp of OOP concepts)
• https://www.amazon.com/Clean-Code-Handbook-Software-Craftsmanship-ebook/dp/B001GSTOAM/ref=sr_1_1?keywords=clean+code&amp;qid=1562330510&amp;s=gateway&amp;sr=8-1 <- Clean Code, recommended for every newcomer at my work
• https://www.amazon.com/gp/product/B075LRM681?pf_rd_p=2d1ab404-3b11-4c97-b3db-48081e145e35&amp;pf_rd_r=22NFZ5GCWM7YMK2A5A2G <- Clean Architecture
Hi there,
If your primary interest is in blogging, I would recommend an existing platform like Ghost to get you up and running quickly. However, it sounds like you're more interested in web programming, with blogs being an interesting application.
These days, a lot of web applications are written with scripting languages, primarily Python, Ruby, or Javascript[1]. Each of these have many web frameworks to help you write your server application, but the big ones are:
If you're already familiar with one of those languages, obviously you should heavily consider exploring its frameworks. Alternatively, you should research the languages and their frameworks on a high level and get an understanding of their core differentiating features before choosing one.
Personally, I'm a lover of JS and node since that allows you to write your entire stack in Javascript, but there are those in this subreddit who call me a fanboy :)
Regarding your client, any behavioral logic is going to be done in Javascript, the markdown will be in HTML, and your layout and style will be in CSS [2] - no way around that, so you better get familiar.
Excellent intro to modern HTML/CSS
Excellent intro to Javascript
[1] Javascript executes in a unique server environment via Node.js, utilizing Chrome's v8 JS engine.
[2] Of course there are languages like Coffeescript and Compass that compile to JS and CSS, this is probably beyond the spirit of the question.
This video is a Google interview example so of course the problem is a bit contrived, but I think it is a decent illustration of the process he is referring to. The guy writes the code out in C++, but you could just as easily write in pseudocode.
Solving the problem by hand and writing a sketch of the algorithm builds intuition and makes the actual code much easier to write. People knock interview prep as being nothing like the job, but I find that it can do a lot to boost general problem solving. CTCI and leetcode are good resources. If you are brand new to programming Codingbat might be useful, but it is really just for the basics.
I'm sort of in the same boat as you, except with an aero and physics background rather than EE. My approach has been pretty similar to yours--I found the textbooks used by my alma mater, compared to texts recommended by MIT OCW and some other universities, looked at a few lists of recommended texts, and looked through similar questions on Reddit. I found most areas have multiple good texts, and also spent some time deciding which ones looked more applicable to me. That said, I'm admittedly someone who rather enjoys and learns well from textbooks compared to lectures, and that's not the case for everyone.
Here's what I gathered. If any more knowledgeable CS guys have suggestions/corrections, please let me know.
Full disclosure: I haven't actually read more than the preface of any of those books. Software engineering topics are more directly applicable to me than CS topics right now, so here are some that I've actually started reading:
Not a website designer, never designed a full website, but recently read Don't make me think. Though I was reading it for ideas in general usability, it's focussed towards websites. It's a pretty short book that you can pretty casually get through in a few afternoons.
Styles and schemes are easy to change, making a robust and usable website should be top priority.
Yours is better. You eliminated the temporary variable which is a very good refactor. Performance wise yours is better (for same reason) unless the compiler optimizes away the temp variable, then they are the same.
For some reason code that uses temporary variable like theirs takes me longer to read.
I will recommend the book refactoring by Martin Fowler.
Check out this book: https://www.amazon.com/Elements-Computing-Systems-Building-Principles/dp/0262640686
It is heavy reading, but the reading is short and you'll spend most of your time implementing the projects, which are non-trivial but very fun and rewarding IMO. For lighter reading, check out CODE by Charles Petzold. It reads like a novel and requires no CS background but will leave you with a better understanding of the hardware/software stack than most CS grads have.
If you want an excellent whirlwind tour to computer science basics with a language you've probably never heard of, I'd recommend MIT's Structure and Interpretation of Computer Programs course. The video lectures and the course book are available free online. It's pretty tough going but will seriously expand your mind :)
For design stuff I'd recommend reading books about OO testing and refactoring, like this or this.
I'm reminded of this Ira Glass quote:
https://www.goodreads.com/quotes/309485-nobody-tells-this-to-people-who-are-beginners-i-wish
Are you a professional developer? You might talk to your team lead, manager or other senior engineer on your team about making a plan to improve.
> Death by iteration or death by un-maintainability
Learn about refactoring. This is the classic book:
https://www.amazon.com/Refactoring-Improving-Design-Existing-Code/dp/0201485672
but it is a common idea now. Test-driven development could help with this.
> perfect response with a great code example way better than I could've done it given weeks or months
The key habit here is to ask yourself, "What would I have had to know to come up with this myself?" and then go learn that and internalize it so if you ever see this problem or a related one again, you can solve it. If you do this consistently, you'll have a powerful bag of tools and be able to solve lots of problems easily that you couldn't before.
Finally, it doesn't sound like you have a formal CS education. You might think of going through some undergrad CS courses online (edX, Coursera, MIT OCW, etc.) It takes long-term persistence that few have the patience for, but if you can make it through, they will transform your understanding of computers and development.
Focus on UI design.
A lot of people tend to think of programming as very math-heavy (it's not, unless the domain you're writing software for is weather simulations or something that itself requires math). So we end up thinking the technical side is important and the "soft skills" are unimportant (or at least, not worth including in our study time).
I'm old enough now where I still like programming, but I've realized I don't care about code; I care about making software that people actually use and find useful. Building a tesla coil in your garage is cool, but so what tons of geeks have done that. I want to make something useful, and it doesn't matter how elegant your algorithms are if your program is confusing, unusable, or solves the wrong problem.
I'd recommend these books, in roughly this order:
But to answer your question: personally, I'd do math. I'm so busy that I don't have time to just sit and study math for fun very often, so it'd have been nice if I did that more when I was younger. (But maybe if I did, I'd be saying programming right now.)
In terms of practical, professional skills, here are a few I would recommend:
For more tailored recommendations, where do you feel that you're weak? There are plenty of college textbooks that can introduce you to algorithms, but if you have an end-goal in mind, you can really focus your learning. Work on some tougher projects than you're used to, and study open source code that does interesting things.
The Little Schemer. After you read that book, in addition to having had a car load of fun, you'll be pretty good with recursion, which is all that book basically teaches. It's pretty slim, around 100 pages IIRC. You could knock it out in under two weeks if you worked at it. Man, I love that book.
Everyone keeps mentioning programming language resources, but I have yet to see any one mention any algorithm sources. Honestly learn how to develop algorithms, they are language agnostic. And you can practice them on paper. Good luck on your endeavor.
I haven't read this yet, but have heard good things.
https://www.amazon.com/gp/aw/d/1848000693/ref=mp_s_a_1_1?ie=UTF8&amp;qid=1496313668&amp;sr=8-1&amp;pi=AC_SX236_SY340_FMwebp_QL65&amp;keywords=The+Algorithm+Design+Manual&amp;dpPl=1&amp;dpID=41s5pnqOlyL&amp;ref=plSrch
Eloquent Javascript
You Don't Know Javascript
Wes Bros (not all are free, but lots are and he has lots on Youtube. if you want some of the paid ones, there are ways, Yarrrrrr. But if you can, buy it as it's not that expensive and he's a kick ass teacher. If you can't afford them, yarrrrrrrr! Then when you get a job, go and buy them so you're not a dick.
Advent of Coding - Great fun, you'll likely only get the first few to start, but you can read other's code to see how "professionals" do it.
There are a number of other sites for coding practice like... I think... leetcode? Something like that. Codewars. There's a ninja themed one as well. Do a couple google searches and you should have tons.
Oh, and the book JavaScript and JQuery: Interactive Front-End Web Development is a great book for starting out, it's dry as hell, but it's full of everything you want to know. The link is not an affiliate or whatever, I get nothing, just read it.
I'd suggest finding a good course and a good book that you can use for reference. Then cementing your skills by doing lots of problems.
The book: this one's easy. Skiena's Algorithm Design Manual is highly regarded, surprisingly readable, and affordable by textbook standards. Don't need to read it cover to cover, but it's great reference, and I'd suggest reading the really critical chapters like graph search and sorting.
The course: You can't really do better than Stanford's course, taught by Tim Roughgarden. I took it a few years ago and have used it to brush up every time I apply for a new job.
The problems: it's important not to dive into this until after you've learned the basic concepts. But Leetcode is the standard, and for good reason -- it has a ton of problems, many of which are leaked from real companies. At first, these problems will seem very difficult -- it make take hours to solve a 'medium' level problem, if you can get it at all. If you simply can't get it, read the solutions and really understand them.
I also recommend the book Elements of Programming Interviews. You'll hear a lot of love for Cracking the Coding Interview on this sub, but it's too easy and outdated for current interview prep. It's a fine intro book, but it won't take you all the way to where you need to be.
All the programming best practices you know apply to refactoring as well.
Use source control (Git, Mercurial, SVN, whatever) and commit often, on your own refactoring branch if possible. This way you can "save progress" and revert any changes, should your code get worse in some way.
Also, test a lot. Both during and after the refactoring. Having automated tests really helps. Make a small change, run the tests, make sure everything works, rinse and repeat.
Martin Fowler and other people have books on refactoring. I'd also recommend watching one of his talks.
Lastly, remember that refactoring is not a one-time thing. It's a frequent, ongoing process.
Make small revertible changes in one unit/module at a time, if possible. You don't want to fall too deep in the rabbit hole, and forget what you actually wanted to change.
I understand how you feel, honestly - as someone who did poorly in school, and I am somewhat dyscalculic, I really feel like I can relate!
The important thing for you, in my opinion, based on your explanation there, is to look for learning materials that suit you. Some people learn easily from really academic materials, some (like me) don't - and fortunately, there are lots of materials out there trying different approaches to teaching this kind of stuff. It gets easier as you go, as well - once the ball starts rolling you find it much easier to grasp future concepts. I got a massive 1300 page book called "An introduction to Algorithms" many years ago... Introduction my arse. It might as well have been alien language to me. But now, years later, I can actually understand its contents. It definitely was not an introduction (but it is a great book, both physically and literally).
A few recommendations for actual introductory books on these subjects:
"A Common-Sense Guide to Data Structures and Algorithms" by Jay Wengrow (2nd Edition coming 2020)
This book says the following in the opening chapter:
>"The problem with most resources on these subjects is that they're...well...obtuse. Most texts go heavy on the math jargon, and if you're not a mathematician, it's really difficult to grasp" . . . "Because of this, many people shy away from these concepts, feeling like they are simply not 'smart' enough to understand them."
It's not a perfect book, but it goes into a lot of basic data structures and explains them in a not-insane way. It helped me a lot! Understanding not just how they work, but why they are useful, is so helpful.
"Grokking Algorithms: An illustrated guide for Programmers and other curious people" by Aditya Y. Bhargava
A similar book, however, more algorithm and less data structure focused, and it goes into somewhat more depth, although usually the extra material is considered optional. The author here expresses a similar concern that books and learning materials on these concepts are often very hard to understand, and it need not be that way!
You can learn these things, you just need to find the right book/method that works for you! It can take some searching to find it. I know from experience!
Read the books, try to implement some of their concepts, and then try applying those things to real problems (i.e. from HackerRank or similar sites, try more than just HR). Read the book again. Repeat. You will understand a bit more each time. That was what worked for me, at least.
Thanks, I'm sure you will. It's just a question of getting that first success. Afterwards, it gets much easier, once you can point at a company and say "Their customers are using my code every day."
As for the interviews, I don't know, I'm honestly not the type to get nervous at interviews, either because I know my skill level is most likely too low and I take it as a learning experience, or because I know I can do it. I'd say that you should always write down all the interview questions you couldn't answer properly and afterwards google them extensively.
Besides, if you're from the US, you have a virtually unlimited pool of jobs to interview for. I live in a tiny European country that has 2 million people and probably somewhere in the range of 20 actual IT companies, so I had to be careful not to exhaust the pool too soon.
Funnily enough, right now, my CTO would kill for another even halfway competent nodejs developer with potential, but we literally can't find anyone.
Anyway, I'm nowhere near senior level, but I can already tell you that the architecture:language part is something your bootcamp got right. To that I would add a book my CTO gave me to read (I'm not finished yet myself, but it is a great book) - Patterns of Enterprise Architecture. Give it a look. I suspect, without ever having tried to implement a piece of architecture like that, it won't make much sense beyond theoretical, but I promise you, it's worth its weight in gold, once you start building something more complex and have to decide how to actually do it.
To answer your questions in the other comments, no language requires pre-requisite knowledge in another. You can sufficiently learn from the ground up with basically any language, including C++, it's just a matter of how... painful... you want it to be. I don't think anyone would advise you starting in Assembly, for example. C++ isn't usually recommended as a first-time language, but that being said it's still definitely possible. A lot of people recommend Bjarne Stroustrup's (the creator of C++) book for first-timers who want to get started with C++. Though it's a massive tome.
Personally, I think that regardless of whether or not you're going to have an easier time learning one language before another, you'd be better off getting started with the language you eventually want to end up in... so if that's C++ for you, go for it.
A big thing is learning just how they function. Such how a Stack differs from a Queue and so on. Once you understand that you can implement it in any language really. If you are having trouble finding them in C#, you might wanna try looking at python since its pretty close to reading straight english(and there are a fair more courses that use python). Udacity has a really good courses that are free that I believe explain it really well.
My favorite being
https://www.udacity.com/course/technical-interview--ud513
Or even if you arnt looking for a job and just doing this for a hobby, the book Cracking the Coding Interview. It has examples of problems and data structure examples in C#.
https://www.amazon.com/Cracking-Coding-Interview-Programming-Questions/dp/0984782850/ref=sr_1_1?ie=UTF8&amp;qid=1473262882&amp;sr=8-1&amp;keywords=cracking+the+coding+interview
After this course, you can take one that goes into the theoretical aspect handling Big'o, time complexity, efficiency, and such =).
Not OP but I discovered this book 'Grokking Algorithms' from a fantastic youtube channel 'The Coding Train'. The book explains a lot of the algorithms and data structures that I am learning in my first sem of CS at school. This thing even has the stuff that I am going to learn in the next semster. I found this book much more fun than my monotonous textbooks.
If anyone wants to get a good grasp of the fundamentals of A&DS this is a great starting point and then move on to MOOCs by famous Universities. MIT's A&DS was the one that I used. Dunno if it's still available on YouTube because I remember that OCW courses were removed or something?
Link
>How does one make a structural change in a project that is this entagled and big?
Slowly, and with a lot of tests. If you want a book recommendation, Working Effectively With Legacy Code by Michael Feathers is the Bible on this subject. The key takeaway is that code should be considered legacy if you can't make changes to it confidently. The only way you can be confident is if it is well tested.
I would also say that although it is very tempting to look at a poor codebase and try and make it better, ask yourself if there is value in doing so first. Focus on what is going to add value in the immediate future.
You've already done the first step: admitting that college can only teach the fundamentals while the rest of the things you need to know, you will learn while working.
With that out of the way, here's the next step: apply the Joel Test to your new employer.
If it gets an 11 or 12, you'll be fine. Find a senior developer there to mentor you and you'll be a decent software engineer in 1 - 2 years.
Otherwise, while you might learn a lot of new stuff in your first job, they might be inadequate, outdated, or outright incorrect. In this case, plan an exit strategy ASAP so that you can leave to another company that has a much higher score in the Joel Test. In this fast paced software industry, it makes no sense to spend 5 years in a company where you'd only get to grow the same amount as another guy who just spent 6 months in a better company.
Next step: read. No, not those "Teach yourself [insert language that will be deprecated in 2 years] in 24 hours" books - find the books that teach software engineering, lessons that don't get outdated. Here's the usual suggestions:
Finally, if you have free time, find a local user group or open source community and join them. Not only will you learn fundamentals like version control and automated testing, you'll also be up to date to the latest trends in the industry. Because of this, high school/college students who are active in these communities have a great advantage over their purely academic classmates, not to mention the connections they get in the industry allow them to be employed faster.
I started out learning by reading this book, HTML and CSS. Then I did a bunch of free tutorials on Tutsplus.com as well as watch a bunch of YouTube videos. After that I went back and bought another HTML/CSS book but it was more "textbook" like so I could learn it further in depth.
After this I had enough skill to get hired at a company doing HTML/CSS work, it wasn't great pay but it was a job and it allowed me to further learn on the job.
Then I did the same thing with Javascript, using this book first, Javascript & JQuery, followed by free tutorials online, then purchasing a more "textbook" type book on the subject.
Also for some of the "textbook" type books I ended up buying, I just recently got a membership card at my local library and they had those book there so if I'd known that when I was learning I could have checked out those books for free, so check and see what your local library has.
Also another thing I did was check out my local community college, they had really cheap classes that I ended up taking online.
A lot of these are known as "Code Smells". Learn to identify them and try to fix them.
Other good books that may help you:
Use something like StyleCop or Linting which are supposed to check and compare your code against best practices.
I would emphasize the end of /u/razeal113's post. Don't reinvent the wheel. Learn from those who came before you by studying common algorithms.
MIT's algorithms course, 6.006, is a good introduction to the concepts that are important to analyzing and applying algorithms and it also introduces many important algorithms. You can watch the lectures and access the course material for free.
http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-006-introduction-to-algorithms-fall-2011/lecture-videos/
If reading is your thing, I like Skiena's Algorithm Design Manual. It's not too dense and has war stories where you can read about how the algorithms have been used to solve real problems.
http://www.amazon.com/Algorithm-Design-Manual-Steven-Skiena/dp/1848000693
Whatever your goal with programming is, there's a good chance that it won't involve inventing new algorithms; instead, nearly everything you do will involve recognizing how to apply and/or adapt an algorithm you already know to the problem you're trying to solve. The more algorithms you already know, and the more comfortable you are with them, the easier it will be to recognize and apply.
JavaScript and jQuery by Jon Duckett
Amazing book for anyone starting JavaScript and jQuery. Great examples and clear explainations. Wish Duckett wrote more JS-related books. I'd buy them all!
These are books I read many years ago, they can be helpful but may be dated and will not include newer features. But as an introduction they worked well.
Thinking in C++ Voume 1 and 2 by Bruce Eckel
https://www.amazon.com/Thinking-Vol-Introduction-Standard-2nd/dp/0139798099/ref=dp_ob_title_bk
https://www.amazon.com/Thinking-C-2-Practical-Programming/dp/0130353132/ref=pd_sbs_14_1
And Scott Meyers
Effective C++ - https://www.amazon.com/Effective-Specific-Improve-Programs-Designs/dp/0321334876/ref=pd_sbs_14_2
Effective STL - https://www.amazon.com/Effective-STL-Specific-Standard-Template/dp/0201749629
Got THIS, it´s amazing.
It starts out with the fundamental principles of logic gates and transistors, moving through memory adresses and basic assembly, through to making your own compiler and a basic OS. Each chapter has a nice little simulator program you can download and use together with a number of exercises, to help you consolidate what you´ve learnt.
And no, I didn´t write it! Or sell it for a living. Nor am I in any way affiliated with anybody having to do anything with the production or sale of this book. I just read it. It´s great.
Programming: Principles and Practice Using C++ is a great book on C++ that doesn't assume as much programming experience as C++ Primer. While the Primer is pretty good, if you haven't done much programming before C++, I would recommend Principles and Practice.
You gotta start somewhere! I'm glad that you are taking the programming classes. Programming is fun, and challenging, you'll see. For starts, just go through your course and pay close attention to (a) algorithms and (b) data structures. If you find it hard to understand, just come back here or go r/learnpython. We are here to support you. Also, if you prefer books, i recommend this one - he talks through the concepts from problem solving and steps through psuedo-code before writing a functioning program. If you prefer an online experience, try all the easy problems on leetcode, don't get intimidated if you don't get the solutions, don't be afraid to peek at hints and solutions.
I think it would be a good exercise to learn something new and then go back to your old projects and apply them. For example, learn about testing and go back to your calculator and try to get a good chunk of it under tests (another good resource is Working Effectively with Legacy Code, which covers getting projects under tests when they don't have any). Then learn about CI/CD, which use tests, and make a build pipeline for your calculator. Then read Clean Code, read about architectures and patterns, and see if you can improve your architecture. This is just an example, but any of those could give you good talking points if interviewers ask about your projects.
Yeah I own http://www.amazon.com/gp/product/0321992784?psc=1&amp;redirect=true&amp;ref_=oh_aui_detailpage_o09_s00 and have been working through it but I was hoping someone might know of a good tutorial that glosses over the hello world parts of tutorials and moves forward with using pointers (I mean like the pointer opperator "<-"), header files and other C++ features and syntax.
Well in that case, if you haven't already make sure to look into Computer Architecture, Assembly Language (I don't recommend actual assembly try something like MIPS), and Digital Logic. Those all really helped me when I was learning OS's and stuff past trivial C programs. Keep in mind that they rarely DIRECTLY helped me, moreso they helped me to understand some of the more advanced topics that build on the lower levels of the system. They should help you to understand more of control flow down to the instruction level and help you to understand why some solutions are implemented through hardware and some through software.
With all that said, my recommendation is really cliche. But if you want to learn advanced operating system concepts then I recommend: Modern Operating System Concepts.
That is a newer edition but you'd be fine going with a cheaper used edition that's older. If it's not sold out this link on thriftbooks is a good place to look. Second Edition
S.O. has a list of books:
http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list
Both options appear to be well-received.
Personally, I learned C++ initially with this book as it was the class textbook:
http://www.amazon.com/How-Program-Early-Objects-Version/dp/0133378713?ie=UTF8&amp;keywords=deitel%20c%2B%2B&amp;qid=1465331530&amp;ref_=sr_1_2&amp;sr=8-2
Maybe you can pick from the list for the introductory stuff, and pick up Effective C++ by Scott Meyers for recommendations and best practices after you are more comfortable with C++.
http://www.amazon.com/Effective-Specific-Improve-Programs-Designs/dp/0321334876?ie=UTF8&amp;keywords=effective%20c%2B%2B&amp;qid=1465332161&amp;ref_=sr_1_2&amp;sr=8-2
Thanks! Just to make sure, do you mean these two books?
If so, I'm glad you mentioned those. Both of them are already on my to-read list, but they were further down than Knuth's work. Since, as you say, they might better for starters, I'll check those out first.
By the way, I have also heard some good things about this one:
Have you any experience with that book? It's also on my to-read list.
In any case, first of all, make sure you're comfortable in Python before you move on anywhere. Once you're happily writing programs, get A Tour of C++ and see if you like it. If you do, get C++ Primer or PPPUC++ and work through those. My main concern would be that the C++ course may be teaching highly outdated material, and may be of very little use for actually learning C++. If that's the case, knowing a little more beforehand will make it much easier to not grow jaded and resentful.
So I looked at the course you mentioned, and I'm not seeing where it falls short for your goals.
I haven't read this, but it looks like an excellent architecture book, comes with software to implement all projects on. It also says it includes hardware projects. You'll just need to buy a breadboard and a bunch of logic gates, probably.
"This book guides the reader on a journey from the basics of boolean logic and elementary gates through CPU design, assembly, virtual machines, high level languages, compilers and operating systems. How can such a task be accomplished in one 300-page volume? Simple - you do most of the work yourself. The relatively short chapters introduce each concept and suggest an approach to implementation. The reader is then given a project to complete and test. Intimidated by assembly language? You probably won't be after you've written a symbolic assembler. Confused by compilers? Imagine how you'll feel when you realize you've created one for a simple (but completely usable) high-level language." link to the Amazon review
I've been writing C++ for about three years now, so I'm mostly familiar with C++11 (one of the newer updates that added quite a bit of functionality and sort of "updated" the language to make it more modern), though there are definitely people with way more experience in it than me on here.
C++ is a language with a very steep initial learning curve that drops drastically once you understand the basic concepts and write a few programs to practice the concepts involved. If you feel like it's too difficult at some point, take a break, then come at it from a different approach (and of course write a few tests to make sure you're getting it). This applies to other languages almost equally, of course.
You should try to learn C++11 (and C++14, a minor update) more than older variations of the language because it added quite a bit to make it easier to read and write with.
Online guides for C++ tend to be outdated or just plain wrong, it's actually one of the few languages with that quality (although that's changing slowly). It's best to get a book like The C++ Programming Language or Programming Principles and Practice Using C++ (which I would recommend for you over the former, which is actually more of a reference book). By the way, they're both authored by the initial creator of the language, so they also explain some of the design choices and details of the language which may or may not help you better understand it.
Beyond that, just do what's suggested for any other programming language (look at references, read actual programs written in it, etc.)/
"Introduction to Algorithms"by Cormen et.al. Is for me the most important one.
The "Dragon" book is maybe antoher one I would recommend, although it is a little bit more practical (it's about language and compiler design basically). It will also force you to do some coding, which is good.
Concrete Mathematics by Knuth and Graham (you should know these names) is good for mathematical basics.
Modern Operating Systems by Tennenbaum is a little dated, but I guess anyone should still read it.
SICP(although married to a language) teaches very very good fundamentals.
Be aware that the stuff in the books above is independent of the language you choose (or the book chooses) to outline the material.
The Little Schemer may be a good starting place if the information in SICP is too complex to start. It's a fun, effective introduction to how to think like a programmer, functional programming, and the Scheme language.
I would strongly suggest you pick up this book from the library, it will change your mindset into a programmer: (first edition is very good as well) - Programming: Principles and Practice Using C++
by Bjarne Stroustrup (Author) http://www.amazon.com/Programming-Principles-Practice-Using-2nd/dp/0321992784/ref=asap_bc?ie=UTF8 - If you will follow the book from start till end and do all the exercises at the end of each chapter, you will not face the problems you are talking about. Good luck - Yves Soete
leet code is a great place for practice problems
For algorithms this book is great
https://www.amazon.com/Algorithm-Design-Manual-Steven-Skiena/dp/1848000693/ref=sr_1_9?keywords=algorithms+book&amp;qid=1554149281&amp;s=gateway&amp;sr=8-9
Also, if you are looking for a software engineering role you will also need to brush up on high level design like this video:
https://www.youtube.com/watch?v=KmAyPUv9gOY
Taking in mind that you may not have access to a computer:
If you've got no background already, I'd recommend The Little Schemer / The Seasoned Schemer books as they teach programming as if it were arithmetic, so it can be studied without a computer, working out the examples with pencil and paper or just very carefully in your head -- the examples are all very small, and worked through step by step. It moves very slowly though.
If you're looking for something more advanced, there is Structure and Interpretation of Computer Programs (SICP) which again takes a mathematical approach to computing, so the examples are meant to be just as well worked out like algebra as they are put into a computer. It helps a lot to have a computer, but I had fun working through it on a long plane flight, taking notes and working through the code on paper.
SICP's examples can all be worked through on a single sheet of paper, but ramp up quickly in difficulty, so they can definitely keep you busy.
You can either learn to crack the interview or reconsider your job search strategy. Sure, you may not be able to analyze the complexity of a travelling salesman solution, but you may be able to find an employer who instead cares more about software engineering, tooling expertise (version control, CI etc.), expertise with a particular technology (you mentioned PHP), a well-rounded approach to software development in general, soft skills or whatever else you're confident you may bring to the table.
While books are great to read, you should do a bit more research on good books for the topic you want to learn (their intended audiences, what they cover, learning approach, etc.) before jumping the gun and spending $70 on some books you might never finish.
Also, I'd be wary of a 390 page book that covers C++ and Game Programming (might be a bit terse, or not cover enough programming concepts, etc). Maybe you should take a look at the book written by the creator of C++.
And I recommend figuring out a career path, it might be a bit much to learn about web development / web programming and also learn about systems / application programming at the same time. It's better to specialize in one language and be an expert than to be a novice in many.
The book Don't Make Me Think is a great, lightweight introduction to UI design and testing. There are no magic formulas; that is, it's impossible to state that "if your UI does X, Y, and Z, it'll be great!." But there are guidelines that you ought to follow--or consciously ignore.
Your UI is good if the majority of users can navigate it without asking for help of giving up. Start by testing your UI designs on a few friends. Give them some tasks to do. If they can accomplish the tasks, you're on the right track. If not, re-design and test again.
You don't have to be a master to get hired at Google or Apple. You have to be good. The kind of good you get to be by really being enthusiastic about programming. But not unobtainably good.
https://www.amazon.com/Cracking-Coding-Interview-Programming-Questions/dp/0984782850
These are the sort of tests they would give you. The person I spoke to who works as Google mentioned that book specifically and that the test she got was straight out of that book. That book actually talks specifically about how to get hired at places like Google and Apple. Not just "a company like that" but there is detailed discussion about the different big companies like MS and Amazon too. I just need to get around to reading it.
I've heard good things about The Algorithm Design Manual. I personally really got a lot from Algorithms in a Nutshell. As the name implies, it's a small book, but quite good.
I know you requested data structures, but the two subjects are closely intertwined: a given data structure often exists to support an algorithm and vice versa.
HTML and CSS: Design and Build Websites is a fantastic book to start with. It has a beautiful layout and is the top choice from Amazon when searching for html books, with almost two hundred reviews at a 4.5 rating.
Although more about product delivery and lifecycle management, i'd recommend:
https://www.audible.com/pd/Business/The-Phoenix-Project-Audiobook/B00VAZZY32
[No audiobook, but worth the read] The Mythical Man-Month, Anniversary Edition: Essays On Software Engineering https://www.amazon.com/dp/B00B8USS14/
[No audiobook, but about 1/3 the price at the moment for kindle and really good]
Code: The Hidden Language of Computer Hardware and Software (Developer Best Practices) https://www.amazon.com/dp/B00JDMPOK2/
https://www.amazon.com/Dreaming-Code-Programmers-Transcendent-Software/dp/B00AQ5DOCA
https://www.amazon.com/Scrum/dp/B00NHZ6PPE
Same thing happened to me at my last job. I was actually led to believe in the interview that it was a job relevant to my experience but I quickly learned on day 1 that it wasn't. Read as much as you possibly can in your free time for a while, you would be amazed at how quickly you can pick things up. Three books I recommend as a crash course are:
While I have not read it, I hear great things about The Little Schemer
The Little Scheme on amazon
I used SICP which can be found here. It is really great!
Break your main up into multiple smaller methods, and call those from your main method.
When doing this, the naming of the method is important. The name of the method should describe what the method does.
The cookSpaghetti is an example of this. The method name says what the method does, not how the method is doing it, which would be an unnecessary detail at that point.
When you structure your code like this, it will almost read like a story, which will make the code much clearer.
The Refactoring book provides more ways to improve the quality of your code, although it might be too advanced right now.
At first, just code. Your code will suck, but it's okay because you're learning.
Then, once you have a good grasp of programming, read
http://www.amazon.com/Refactoring-Improving-Design-Existing-Code/dp/0201485672
And
http://www.amazon.com/Clean-Code-Handbook-Software-Craftsmanship/dp/0132350882/ref=sr_1_1?s=books&amp;ie=UTF8&amp;qid=1397498858&amp;sr=1-1&amp;keywords=clean+code
You can probably find them for free online.
Try the book "The little schemer"
The Little Schemer - 4th Edition https://www.amazon.com/dp/0262560992/ref=cm_sw_r_cp_apa_i_OST2Db7M254TR
I couldn't wrap my head around anything past very basic recursion. Once I had completed this book, I felt like I had a fairly solid understanding of the topic. Well worth the money, in my opinion.
Edit: As a side effect, you learn a little scheme which happens to be a very fun language.
I really like /u/razeal113 's comment. That's a good algorithm for finding a good algorithm. Starting out with brute force isn't necessarily bad, as it at least gives you a jumping board to start optimizing. The only thing I would add is to increase your knowledge and toolbelt. You can gain a lot of inspiration and learn "how to think" by learning, analyzing, applying, and modifying all the awesome algorithms already out there. Here are some resources:
MOOCs.
Online challenges. There is a pretty good list at 14 Coding Challenges to Help Train Your Brain. From that list, I most liked:
Books.
Design Patterns. This is personal opinion, and I'm sure many would disagree, but for me, design patterns were the yin to algorithms' yang.
---
I think programming comes down to understanding data structures and how to manipulate them (algorithms). Linus Torvalds had it right when he said:
> Bad programmers worry about the code. Good programmers worry about data structures and their relationships.
Jon Duckett, who wrote the HTML & CSS book you bought (which is the best in my opinion) also just released his JavaScript book, which I am excited to read. Once you get a grasp on it, I would read JavaScript The Good Parts, by Douglas Crockford, who works for ECMA and helped write the language.
This is an excellent book, I enjoyed reading it. I would also recommend the Elements of Computing Systems.
Code academy is not job training, it's an introduction to syntax.
For instance, after finishing their Ruby course, you will know how to work with strings and vectors and so on, but without more knowledge, you wouldn't even know how to start to build a Ruby application. If shown an existing Ruby program you might be able to read a bit of it and change some stuff here and there, but you would be far from any significant changes.
I, as a full stack developer, don't use Code Academy as a learning resource but as a refresher course kind of thing. When I haven't been using bootstrap too often, I go do the code academy course and relearn the basics in order to smoothly transition into using it on my own.
Better alternatives would be an actual book. Go to the library or a book store and find an introduction to web development book. I've heard that this is a pretty good book, http://www.amazon.com/HTML-CSS-Design-Build-Websites/dp/1118008189/ref=sr_1_1?ie=UTF8&amp;qid=1448997572&amp;sr=8-1&amp;keywords=html+for+beginners.
Edit: Beyond the absolute basics, Code Academy (and other things like it, FCC for example) are basically useless.
doing this line by line with as we speak with this amazing book. It definitely helps!
Taking a course will definitely help and I have a few book suggestions.
Intro to Algorithm
This is pretty much the holy grail on algorithms, used in many college CS courses.
Skiena's Algorithm Design
My personal favorite. Combines his Ph.D experience with real world problems.
In addition to going out and actually getting your hands dirty as others have suggested, make sure that when you're doing it, you're using the best design principles you can muster.
Also, do some reading! There are lots of good books out there that can help you learn common conventions and good design principles.
I'm going through Effective C++ right now, and I've learned more about how to write C++ in the first quarter of the book than I had in the previous 2 years of my life.
Effective Java is a good source, too, but obviously it's going to depend on which framework and languages you're using. Either way, though, you'll learn a lot of essential concepts for how to write maintainable code and prevent common design mistakes.
Also, if you're planning on writing a lot of Object Oriented code, read up on Object Oriented Design Principles/Patterns. Even if you never use them, other people will. If you start working in bigger codebases, you'll see them in action, and it'll make learning the code a whole lot easier if you're familiar with the patterns they're using.
honestly, pick up this book. it'll up your professionalism a great deal. part of the responsibility of a good coder is to be able to push back to management. not rudely, but they make their money decisions based on tech they don't know, and it's your job to make sure they understand what's possible and what's not instead of just rolling over and taking it.
Well, it was my fear too. When I was getting close to graduation, I was sure nobody would be interested. Then I got an interview, and then got a job, and then I was away.
Generally, at least in my experience, it's not hard to get interviews (or at least phone screens) because companies are all looking for talent and a phone screen is pretty low-cost for the company. If you're worried, warm up with some interview questions (from this kind of book for example). If you can get an interview, and if your interview goes well...well, that's all it takes.
You can check out this tutorial, helped me while I was learning. If you could share your code, that would be helpful too. This book also has an excellent explanation.
This book is fantastic and beautiful.
I know you are looking for specific language books, but I feel like this book is a very good read.
I don't know about your specific learning path there... But most of the times this book is recommended: https://www.amazon.com/Cracking-Coding-Interview-Programming-Questions/dp/0984782850
And btw your English is very good :)
Hi! I recommend the following books:
You can find other similar books here and here.
One that I especially liked (although closer to an algorithms textbook, but also had very cool "War Stories") is called The Algorithm Design Manual.
Have fun reading! :D
Your foes are kids in their twenties with a degree which takes years to achieve, this will be tough! But I think your age and your willingness to learn will help you lot.
&#x200B;
Other things to learn:
&#x200B;
If there's one framework to look at, it would be spring: spring.io provides dozens of frameworks, for webservices, backends, websites, and so on, but mainly their core technology for dependency injection.
&#x200B;
(edit: other important things)