Code: The Hidden Language of Computer Hardware and Software. It may be a bit more lower level than you're looking for, but it'd be a great foundation to build off of.
I always recommend this book called 'Clean Code'
It details a collection of techniques to keep your code readable and maintainable.
In general use good variable and method names and use more, shorter methods where appropriate
Code: The Hidden Language of Computer Hardware and Software
I'm surprised no one has mentioned this yet. This is the best book for beginners. It will cover the basic of codes (generic), how electricity works, counting systems (binary, base ten, hexadecimal), switches, boolean logic and logic gates, memory, basic computer architecture, operating systems etc.
It assumes you have no knowledge regarding any of the topics mentioned above while using intelligent and straightforward writing.
Introduction To Algorithms is kind of the gold standard. It's heavily detailed, well written, and I'm pretty sure they put the word "Introduction" in there as a joke(it's 1292 pages).
Code: The Hidden Language of Computer Hardware and Software is a great intro to some basic computer science concepts. It's written to be accessible to anyone and explains things clearly.
I'm the author of Python Crash Course, from No Starch Press. The book is not available as an audiobook. Over the past five years there are numerous ripoff books that have used the phrase "crash course" in their title. These are machine-generated "books" that gain a high ranking on Amazon by offering a free version and dumping a bunch of fake reviews, and then try to grab a little cash through some paid versions. Here's a clear example of this.
I wonder if OP downloaded one of these fake books. I know my book doesn't work for everyone, but it's really frustrating to watch these ripoff books get in the way of people who are sincerely trying to learn.
Cracking the Coding Interview by Gayle Laakmann McDowell
This book goes over every one of those areas and gives tons of example problems. It also talks a lot about the interview process and what companies are looking for in a good candidate.
>What are your favorite resources out there that you turn to, that could be helpful in showing someone what a good review is?
Clean Code by Robert C. Martin.
This book covers all kinds of great stuff regarding correctness, maintainability, testability, etc.
I want to call your attention to something you wrote though.
>mid level engineers spending lot of time arguing about things that should not be the focus of the code reviews - e. g. variable names, code styles etc. In doing so, they are also not paying enough attention to the overall architecture, correctness, maintainability, testability etc. for the code they are reviewing.
This is a false dichotomy. Having code with well thought out names and formatting, enables having maintainable and testable code. It makes reasoning about correctness much easier. Same is true for the overall architecture. I would go so far as to say, you cannot have all of the attributes you desire, without having code that is easy to read.
Now, mid level devs are notorious for taking "Clean Code" too far, and inciting holy wars to purge the heathen sinners who dont conform 100%. Perhaps they just need their zealotry toned down. Names and formatting are definitely important, but not so important that they cant see the forest for the trees.
Python! Simple for beginners to hop straight in and complex enough to make sophisticated applications later on. I would say just grab this book and dive in head first. Or just look up videos on YouTube. https://www.amazon.com/dp/1593279280/ref=cm_sw_r_cp_apa_fabc_Ult3FbQT9VY7X
Best way to learn is to pick one language and stick with it. You can learn others later!
Also, "The Coding Train" is a very fantastic and entertaining coding youtube channel!
Clean Code taught me how to write clean code. Cannot recommend this book enough, every place I've worked I've brought a copy and at least one coworker will borrow it and find themselves really questioning a lot of their decisions. It's also a great book to refer back to every few years.
edit: Truthfully, some was experience, seeing other people's code early on. Discussing with peers. Thinking about single responsibility et cetera. I don't think there is one source but the book is something at the top of the list.
Python Crash Course, 2nd Edition: A Hands-On, Project-Based Introduction to Programming is good book for Python for people without previous programming experience. I do not have any recommendations for Flask and React since I do not use them.
It's written in Java, but for the most part, it's very transferable to C#. When I was a junior dev transitioning to intermediate, it was pretty worth my while. It's a relatively easy read and doesn't require you to be writing code or sitting at a computer (at least it didn't for me).
Feel free though while reading it to critically question some ideas as to how applicable they are in the C#.NET ecosystem, current best practices, and your day-to-day work. (For example, IIRC, he argues that you shouldn't prefix interfaces with the capital I
. I still do that though and I find it worthwhile.)
I would recommend reading Design Patterns: Elements of Reusable Object-Oriented Software. That book will give you the majority of design knowledge you would gain at this point in your career from college.
Awesome book Code , really helps you understand from a bottom up perspective. Super approachable without a CS background and does not need a computer in front of you to appreciate. Highly recommended.
Poorly written code generally doesn’t follow Best Practices, but includes issues like using inappropriate algorithms and data structures to manage data, and bad design decisions.
I recommend Clean Code by Robert Martin https://www.amazon.com/Clean-Code-Handbook-Software-Craftsmanship/dp/0132350882
He does a great job of highlighting what makes code readable, and maintainable, especially in the context of Java and OO Design and OO Programming.
I’ve heard some call it controversial. But after more than 20 years in the industry ( username relevant) I find him to be particularly on point and accurate. Personal preference aside, he knows what he is talking about and tells it like it is.
When I went, there were always a few companies where the representatives had a badge that said "I hire frosh." My advice would be to check it out to get a feel for what's going on. I wouldn't expect a whole lot, but at the very least it'll be good prep for the frosh/soph fair.
A word of advice - when I went to the fall career fair during my freshman year, I actually found it quite stressful. I ran into a couple of recruiters who came off as condescending, and the overall atmosphere seemed pretty stressful (gotta hustle for that internship). It was a bit of a contrast from the dorms and even office hours, where people are generally happy to lend a helping hand.
When I took CS 103 later, Keith Schwarz actually had a fairly negative view of the effect/messaging of the fall career fair towards freshmen. He felt that the competitiveness and the inevitable rejection of certain internships would not really provide a positive view of one's learning. Learning is a long process, and getting rejected from a dream CS internship might lead some to feel that their classes were for nothing. It's ultimately up to you whether you want to view your CS education as more of a pipeline into a good job, or an opportunity to intellectually explore (you can of course balance both, and there is no right way to do it).
So if you wanna hustle for an internship, then by all means go for it. However, keep in mind that the career fair is only one way to get your foot in the door. If you wanna be a real snek, network around and find people who can give you referrals for companies you're interested in. Also code up a project or two and put it on GitHub (with a link on your resume). Most importantly, read the good book.
La filosofia descritta da te riassume la filosofia "all'italiana" : si massimizza il guadagno, minimizzando l'investimento. Questo non solo in termini di economia, ma anche di tempo e, talvolta, di istruzione.
Personalmente penso e ho trovato aziende (anche piccole) che hanno metodi molto più rigorosi per lo sviluppo (creazione di documentazione secondo un certo stile, ogni variabile deve essere assegnata con un nome preciso, ecc..). Poi, vabbè, ci sono anche aziende molto grosse con la metodologia AGILE , ma già creare una buona documentazione e seguire poche e semplici regole , fa la differenza fra il buon "programmatore" e il mitico cuggino.
Un buon libro per i colleghi Clean code , sempre che di inglese ce ne capiscano qualcosa.
I've said it a million times and I'll say it again: Get your hands on a copy of Cracking the Coding Interview and read it from cover to cover. If you're going into college now most of the information in this book won't make sense if you don't know how to program, but regardless I would still pick it up. Study this book for interviews. If you start using this book to study for interviews (And you need to study for interviews, treat interview prep like any other class) I guarantee you can land an awesome internship and a great job.
CODE is an awesome book that covers the basics of how computers are built out of very simple components and how they operate with just a few simple instructions.
I like this book because it covers both how computers are built, but also why they are able to accomplish so much with just adding and moving numbers around.
Super easy read too. I read it in highschool and loved it
Link: https://www.amazon.com/Code-Language-Computer-Hardware-Software/dp/0735611319
Code by Charles Petzold sounds like it is exactly what you're looking for. It reads more along the lines of a novel, starting at the very beginning (electricity, binary, etc) working up through all the parts of a basic computer (including digital logic, assembly, etc). It's as good as (or better in my opinion) than any undergraduate book on OS/Computer Architecture you'll find. And a much more enjoyable read.
You may want to check out Cracking the Coding Interview. The table of contents can be found here. I'm pretty sure there is a section for each thing on your list.
Write clean code that is easy to understand. Commenting is, at best, a necessary evil.
Take this for example:
if((employee.flags & HOURLY_FLAG_ && employee.age > 50) employee.GetBenefits()
vs.
if(employee.IsEligibleForFullBenefits()) employee.GetBenefits()
Code can be self documenting; but it takes good craftsmanship and a lot of experience to make it happen.
I totally stole this example from the book Clean Code and its chapter on commenting, but it really drove the point home for me. Worth a read for anyone who wants to craft well written applications.
I'd recommend stepping away from leetcode and the other sites for a bit. I think they're useful if you need the practice in typing up the algorithms in code when you have the algorithms pretty well memorized.
I would HIGHLY recommend "Cracking the Coding Interview" https://www.amazon.com/dp/0984782850
There are also a few good YouTube videos but I don't have links handy. I will say there's a lot of garbage out there too, so skip through them liberally.
Remember the interview process is a total game. I interview candidates and even we know it's all a sorry game. But we have to check the stupid boxes because no one has come up with a better way to weed out people who can't code a for-loop.
Your ability to pass interviews is not directly correlated to your ability to actually deliver software in the real world. Interviews often don't touch on design or real world tradeoffs or continuous integration or how to manage a large project or so many of the other aspects of software engineering. Instead it comes down to rote memorization of solved algorithms and stupid array problems that never represent an actual problem someone has actually needed to solve.
In an interview: let's spend half an hour writing quicksort.
In real life: can you think of any language written that doesn't have a sort function in the standard lib?
I know you know this but I hope that this has helped.
Good luck.
To me, "leetcode" is the brand name for the concept of solving programming puzzles, just like "Kleenex" is for facial tissues. When I see someone mentioning leetcode, it could mean anything from the actual LeetCode website to Codewars, HackerRank, or any other interactive programming problem solving site.
I've seen leetcode mentioned here and also very heavily on Blind (abbreviated LC there).
This concept is not new, and is the central focus of the very popular interview prep book Cracking the Coding Interview
I would have also included:
https://www.amazon.com/JavaScript-Good-Parts-Douglas-Crockford/dp/0596517742
However at this moment in time I can no longer recommend it... we've just moved too far ahead in the JS world.
Just to give you a peace of mind, I'm gonna share that I'm utter shit too. I have almost 20 years of experience and working at a huge worldwide company. I have conducted more than a hundred interviews myself and yet, if I apply to somewhere I can't write a simple parsing script in a coding interview.
Some of us just wired this way. Also interviews are like a date. It is equally up to chemistry and luck along with correct answers to questions if you get the job.
To be useful too, a few links. Check out this for inspiration: https://rejected.us/
The best book to get an IT job: https://www.amazon.co.uk/Cracking-Coding-Interview-6th-Programming/dp/0984782850
The problem is that to understand clean code they have to be able to differentiate between good and bad design. That insight usually only comes with the experience of having to modify badly written code. I can point them to Clean Code By Robert Martin. But most of it will go over their heads.
If there is one book to read about testing it is Working Effectively with Legacy Code. And if there is one thing to remember from it, it's
> Legacy code is untested code
So stop writing legacy code.
CODE - The Hidden Language of Computer Hardware and Software
https://www.amazon.com/Code-Language-Computer-Hardware-Software/dp/0735611319