(Part 3) Best products from r/cscareerquestions
We found 80 comments on r/cscareerquestions discussing the most recommended products. We ran sentiment analysis on each of these comments to determine how redditors feel about different products. We found 836 products and ranked them based on the amount of positive reactions they received. Here are the products ranked 41-60. You can also go back to the previous section.
41. So Good They Can't Ignore You: Why Skills Trump Passion in the Quest for Work You Love
- Great product!
Features:
44. The Web Application Hacker's Handbook: Finding and Exploiting Security Flaws
- Comes with secure packaging
- It can be a gift item
- Easy to read text
Features:
45. The Passionate Programmer: Creating a Remarkable Career in Software Development (Pragmatic Life)
Pragmatic Bookshelf
47. Don't Make Me Think, Revisited: A Common Sense Approach to Web Usability (3rd Edition) (Voices That Matter)
- New Riders Publishing
Features:
48. Structure and Interpretation of Computer Programs - 2nd Edition (MIT Electrical Engineering and Computer Science)
- New
- Mint Condition
- Dispatch same day for order received before 12 noon
- Guaranteed packaging
- No quibbles returns
Features:
50. Debugging: The 9 Indispensable Rules for Finding Even the Most Elusive Software and Hardware Problems
- Used Book in Good Condition
Features:
51. Game Engine Architecture, Third Edition
- Designed by: theawkwardyeti
- Shirt.Woot Original Design
- Lightweight, Classic fit, Double-needle sleeve and bottom hem
Features:
52. Becoming a Technical Leader
- Front Glass Display Outer Lens Compatible with iPhone 6 / 6s A1549 A1586 A1589 A1522 A1524 A1593 A1633 A1688 A1691 A1700 Incl. Toolkit - Black
- Comprehensive repair Kit: Professional tool Kit including 1 x microfibre cleaning cloth, 1 x suction cup, 1 x spudger (lever tool), 1 x Pry Tool, 1 x Wipes, 1 x Sim Pin, 4 x Screwdrivers (Phillips #00, Phillips #000, Torx T2 and Pentalobe P2) for easier installation.
- Compatible with iPhone 6 / 6s A1549 A1586 A1589 A1522 A1524 A1593 A1633 A1688 A1691 A1700 Important: Please check the Model Number of your device before purchasing this Item. You can find the Model type of your device on your device and / or in the settings.
- Installation: We suggest to seek advice from a Professional before replacing the Front Glass Display.
- This is an extremely technical procedure, please familiarize yourself with the process first, before you buy this set and before attempting it yourself: We cannot take any responsibility for damage incurred during the replacement process.
Features:
54. Mastering Bitcoin: Programming the Open Blockchain
- Brand New in box. The product ships with all relevant accessories
Features:
55. Functional Programming in Scala
- Supports the Intel Xeon E3-1200 v5 processor and 6th Gen. Intel Core i3/ Pentium/ Celeron Processor
- Dual Channel DDR4, 2 DIMMs
- 8-channel HD Audio with High Quality Audio Capacitors
- Audio Noise Guard with LED Trace Path Lighting
- Realtek GbE LAN with cFos Speed Internet Accelerator Software
- APP Center Including Easy Tune and Cloud Station Utilities
- Support Intel Small Business Basics
- Micro ATX Form Factor; 22.6cm x 17.4cm
Features:
56. Introduction to Algorithms: A Creative Approach
- New
- Mint Condition
- Dispatch same day for order received before 12 noon
- Guaranteed packaging
- No quibbles returns
Features:
57. Data Structures and Algorithms
- Material: Rayon; V Neck, Half Sleeve, Short Sleeve, Floral Print
- Maxi Dress for Women, A Line, Buttons Up, Flowy, Split
- Suitable for Spring, Summer and Fall; Great for Vacation, Beach, Party, Going Out, Traveling
- Regular Fit; Machine Washable; Do Not Bleach
- Please refer to the size measurement below before ordering
Features:
58. Effective C++: 55 Specific Ways to Improve Your Programs and Designs (Professional Computing)
- Addison-Wesley Professional
Features:
I'm a software dev with 9 years experience, and even I have difficulty finding work. I live in Colorado as well. My qualifications are impeccable. But I still get "no's" for absolutely no technical reason.
My best advice? Work on your resume wording, and your interview people skills. Use active words on your resume, like "initiated", "spear-headed", "lead", "started", "identified". Words that scream out "I'm a leader". It doesn't matter if you have no desire to go into management. The more your resume reads as "I'm a self-starter, I'm a leader, and I'm ALWAYS learning", the better your chances.
Sadly skills alone are becoming more and more ubiquitous. There are scores of self-taught developers out there that dilute the market for people with actual degrees. Budgets being what they are, if a company needs JUST a code monkey, they're going to hire the cheap one. Your degree actually puts you at a slight disadvantage in that arena.
However, if they're looking for a long-term (i.e. quality) person, they're going to hire someone who has NOT ONLY the technical qualifications, but also fits the "perfect employee" model that they have envisioned. This means: pleasant to be around, good customer / people skills, confident (but not cocky), positive attitude. You know, the stuff an HR person would care about. Sit up straight. Make eye contact. Smile. Firm handshakes. Dress well (not too nice though, developers get a bit edgy around folks in suits). Address people by their name. Do not curse. Do not be overly familiar. Do not volunteer too much information (especially things like health conditions and personal quirks). You're interviewing with human beings, who are vulnerable to "gut feelings", "first impressions", and other vague means of evaluating a candidate. Give them every reason to have a good "gut feeling" about you.
This is important: do research about the company before you come in. If you come in, sit down, and act confused about what their business even does, they're going to think you don't care. Find out what the company does, find out what products they make, what their business model is, etc. Find out (if you can) what the employee atmosphere is like. Do everything you can to show that you actually really WANT to work there. This also means attaching a custom cover to your resume, and showing a similar amount of attention to detail that screams, "hey I did this JUST FOR YOU".
As for the technical qualifications, your degree just says "I can be taught". Nothing more. A company who sees a candidate with a degree and a small amount of experience WILL expect you to work for a rather modest paycheck. You CAN scare them off by throwing out a number that's too big. Research the company you're looking at. Use sites like glass-door to find out what level 1 (or similar) engineers are paid. If you can't find information on the company's pay, find a similar-sized company in the same industry. Try to get a realistic idea of what to expect, salary-wise. You can PM me and ask what I made at my very first "real" job after getting a degree.
Also make sure you have a LinkedIn profile. It's surprising how many recruiters hang out on there, just doing searches for keywords, contacting everyone who pops up.
I know you're having a hard time right now, and I know it can be VERY discouraging hearing "no" after "no" (or the classic, "we've decided to proceed with another candidate" line). ALL IT TAKES IS ONE YES. You might be one interview away, but you won't know unless you keep trying. YOU CAN DO THIS. I know it's a lot to keep track of. I know it's a ton of stuff to remember. And I know putting on a brave face especially in the face of financial uncertainty is all but impossible.
I'm not a big believer in positive thinking. But neither am I a big believer in negative thinking. Your post comes across as being incredibly pessimistic and defeatist. While I understand that this is your reality (and please know that this IS a safe place to vent), you need to make absolutely CERTAIN that you leave that attitude at the door when you're interviewing. You're interviewing with people who can and will pick up on that if you're not careful. And like I said, sometimes all it takes is that "unpleasant gut feeling" to cost you the job. Don't give them ammo.
One more word about technical qualifications. Smaller companies put a big emphasis on experience. But larger companies know that experience is cheap, and that what really matters is that you understand the fundamentals. Make sure you understand the fundamentals. This means data structures and algorithms mostly. If it's in your budget to do so, pick up a copy of The Algorithm Design Manual. Once you have a good grasp on the concepts in that book, most white-board coding exercises become much easier. Also, make sure there's (at least) one language you understand REALLY well. Whether that's javascript, or Python, or C, or Perl, or PHP, or Java, or... doesn't matter. Just make sure you have one language that you can actually code competently in.
I know you said you can't move. I live in Colorado Springs. Not sure if that's considered a "move" for you. I work at a DoD company that currently has a number of openings for Java developers, and Javascript frontend developers. It's a modest-sized company (600 people, ish). Your Asthma won't phase them at all (though frankly you really shouldn't ever bring up health issues in an interview). If you're interested, PM me and I'll give you the company name and a few tips about what they're looking for.
If you're interested I can also take a look at your resume and let you know if I see anything that could use some improvement / modification. I know it's really hard to get feedback about resumes. I'm not a hiring manager, but I've spent years perfecting my own, so I like to think I know a thing or two on that subject.
Best of luck.
TL;DR: Just read it. Sorry.
EDIT
I just want to also throw in that I agree with /u/akhbhaat about the gap on your resume. That's not an insurmountable problem, and some companies would still hire you. But, in the words of Ricky Ricardo: "you got some 'splainin' to do". It's not a deal breaker, but it does raise eyebrows. Unemployment can become self-perpetuating because companies assume you're not good enough to be employed. It's bullshit, of course, but it IS now up to you to either take corrective action (go back to school), or come up with a really good excuse as mentioned.
EDIT 2
I also agree with all of the comments about side-projects. Side-projects are a way of showing a company, "I may not have been employed, but I was still actively developing my skills". It also kinda gives them the idea that you're passionate about the field, which is an extremely good impression to give.
Sites like Project Euler and Topcoder might provide a good starting ground to just get you warmed up a bit. Also you may want to consider registering on Stackoverflow and answer some of the questions you know the answers to (don't worry about reputation on there, no one cares). But if you really want to impress them, go start or contribute to an open source project. Doesn't matter what. Doesn't matter what language. As long as it's challenging to YOU and actually teaches you something.
I'm like this and I have no interest in being a manager for at least the next ten years. My managers have actually started complementing me on how I may make a good manager someday so I should probably get around to telling them that. I don't want to mislead them. (At my company we have technical promotion track that parallels the management one. People at this company tend to be lifers so it's probably a good idea to let them think I'll stick around for a while.)
Leadership, project management, and people management skills are hugely beneficial in literally every job role you'll ever have (also your social life, confidence, and more!). Not everyone has to be like this but it's an amazing feeling to get a bunch technical contributors working well together. I think of it as being a technical leader.
The technical lead or software lead role is usually assigned at most companies. At my company software engineers act more like internal consultants. When someone has a problem that requires a software solution, they ask us for help. This business model forces me to understand way more about the project management side than I was initially comfortable with, but I love being able to bring in new team members and consult with experts.
Right now I'm tasking two interns on one project and one intern on another, and I'm also working with an analyst who's learning software development. I love being involved in the technical problem-solving and implementation details. My role on these projects allows me to do that. Also my teaching background makes me really value the knowledge transfer that my company is pushing right now.
I also end up presenting to management a lot. I'm getting better at jumping between the technical details and the big-picture perspective. It helps that I'm ridiculously excited about these projects. Plus it's a very positive environment: my management wants me to do well and look good cause it makes them look really good.
I've been extremely lucky at my job and I totally didn't have these organization or leadership skills a year ago. It's definitely something you can learn if you want to. Check out Becoming a Technical Leader to start if you're interested.
Also (most of you probably know), team projects at work are WAY more fun and motivating than team projects in school (especially in my online program).
What kind of jobs are you applying for? Low-level stuff is typically applicable for things like engine work, graphics, optimization, networking and audio. Okay, that covers a lot of the game development process, but there are certainly jobs that aren't deep into that, like peripheral tooling (making tools for developers to use) or working on stuff like the webservices that powers the online community.
However, if your goal really is core game development, then you need to be a lot more targeted in how you learn. I have interviewed for and was hired by a game company that worked in C++, and have also worked in distributed, networked military simulations (think of it like boring, more realistic Starcraft), so here is how I gained the various knowledge I had in getting through those types of interviews (including a 90-minute written test for the game company where I had to debug C++ code on paper, answer various gotchas, etc.).
I don't know how far you have covered, but this is how I would approach the learning now, were I to start over again.
It covers low-level concepts like CPU pipelining, memory, and how code interacts with the machine. I read this years after I started my job building simulations, and it reinforced a lot of what I learned previously and in college. I also recommended this book to a friend of mine who credits it with giving him an edge over his fellow college grads (he's years younger than I am) in low-level knowledge. If you don't know concepts like cache locality, cache lines and how memory is allocated, this book will cover that and more.
std::vector<T>
in C++.std::map
andstd::unordered_map
std::set
andstd::unordered_set
std::list<T>
andstd::forward_list<T>
std::stack
andstd::queue
std::deque
- The C++ implementation of a double-ended queue.std::set
is typically implemented with a red-black tree behind the scenes)-----
The above covers the 'core' stuff you'd have to learn. If you wanted to get into stuff like network programming or graphics programming rather than just core gameplay development, I can expound further.
Depending on the company and organization you're a part of, the SDET role can sometimes be flexible enough to begin blending into DevOps (Infrastructure) or Tooling territory.
I'm an SDET myself and I imagine I'll eventually find my way to a DevOps/SWE/SDE/Infosec type role myself. But in the meantime, I enjoy what I do. A friend of mine was an SDET and was able to demonstrate his SDE-specific skills and land a full time SDE role with a Big 4 company. So definitely possible, just make sure you're strong on coding and algorithmic understanding / problem solving.
I do have some specific feedback to assist with your goals though:
> Some other interests of mine that I don't get to really work with are linux administration, front-end web development, data analyst/sql stuff, and information security.
Some of these can be incorporated into your work depending on your role:
Hope this helps and good luck!
I know a good bit about this... engine programming specifically.
I have a physics degree and a standing offer to work at Naughty Dog. A good friend of mine from undergrad also has a physics degree, and is an engine developer at Naughty Dog. He is currently rewriting the companion AI for The Last of Us 2. And because it is only 7pm on a Saturday, I do mean currently. He is cited in the definitive text Game Engine Architecture. We talk often, and he even comes to me for help with especially tricky problems. I also have a copy of the 100+ pages of notes he used to study for the Naughty Dog interview... PM me your email for a copy.
This is what I suggest:
Step 1: Read Game Engine Architecture.
Step 2: Read Game Engine Architecture again, but slower this time.
Step 3: Learn 3D math. (There are other resources too, but one way or another you should know literally all the content in that book, because you will be asked 3d math questions during the interview, and if you're not you should keep interviewing.)
Learn how your computer works, from the ground up. Learn how to write extremely performant C++. This includes bitbashing, SIMD, caches, concurrency, etc. Not theory; real world experience. Learn how the GPU works. Learn computer graphics. Learn computer graphics for real. Learn collision detection.
Make a large number of small demos quickly. Decreasing development time is extremely important in the games industry. Make A*, a raytracer, a fibers threading engine, a shadow mapper, a FSM engine, etc.
Here is a recent question my friend asked me (as a brain teaser; he had already solved it):
> quickly check whether a
uint64_t x
is equal to any of 16 unique otheruint64_t
s>
bool f(uint64_t x, uint64_t a[16]);
> it will be called with the same
a[16]
every time, but varyingx
Hint: you expect >99% of calls to this function to return
false
. Post your answer and I'll tell you what's wrong with it. The obvious solution is incorrect. Same is true for anyone else, by the way.He recently came to me with a different problem: using all the time and compute in the world, encode a unit quaternion into 32 bits such that decode on the GPU is extremely fast, and minimize the max error possible. We managed to improve on the state of the art in both respects. No hints here, but I know some people you should talk to if you can show me a better solution. :)
Study games. Play games. Critique games. Love and breathe games. Because that industry will eat you up and chew you out, so you better be prepared to love every single second of crunch time. If you love it, you can do it, but it will torture you if you don't.
It is hard, but if you love it, and not just the idea of it, you can do it. However, as you can probably guess by my breakdown engine developers tend to be very experienced. My friend is an extreme anomaly at being as young as he is and an engine developer. It is more the type of thing you start trying to interview for with ~decade of experience.
Python is a good choice primarily because of the culture around it of focusing on teaching new folks and documenting things for new folks. It is an excellent first language both because:
The first key skill when you first start programming is that you are able to write a buggy program, run into an error that makes no fucking sense, and confidently break down that problem, figure out what went wrong, and fix it. Python provides better tools for doing that than many other languages. ^(look up pdb and py.test) once you are able to write and debug short programs, you can call yourself a programmer and then build on top of that foundation.
A good starting point is this free book followed by this free book by the end of which you will be able to build a dynamic website in python.
There are disadvantages to python. They mostly don’t matter as much when first starting out, but as you gain experience, you should expect to be annoyed by these trade-offs.
The best way I know how is by solving problems yourself and looking at good solutions of others.
You could consider going back to "fundamentals".
Most programming courses, IMO, don't have nearly as many exercises I think they should have. Some books are particularly good on their exercises list, for example K&R2, SICP, and TC++PL. Deitel's has long exercises lists, but I don't think they're particularly challenging.
There are some algorithms/DS books which focus on the sort of problem solving which is about finding solutions to problems in context (not always a "realistic" one). Like the "Programming Challenges" book. In a book like that, a problem won't be presented in a simple abstract form, like "write an algorithm to sort numbers". It'll be inside some context, like a word problem. And to solve that "word problem", you'll have to find out which traditional CS problems you could solve/combine to get the solution. Sometimes, you'll just have to roll something on your own. Like a new algorithm for the problem at hand. In general, this helps you work out your reduction skills, for once. It also helps you spotting applications to those classical CS problems, like graph traversal, finding shortest plath, and so forth.
Most algorithms/DS books though will present problems in a pretty abstract context. Like Cormen's.
I think, however, people don't give enough credit to the potential of doing the exercises on the books I've mentioned in the beginning.
Some books I think are worth reading which also have good exercises:
I imagine the other Stroustrupp programming book also has good exercises, but I've never read it. Brian Kernighan is not only the author of K&R2, but of many other books. You could look at his stuff.
Depending on what you mean by good code, though, you could look at other books.
There are also the math books. I'd not discard those. And also, there are other programming books as well. Some I've never read, but want to, like Programming Pearls:
Not only those, but, anyway... The point is that you can look at those books to find examples of good code, good exercises, challenges and so forth.
Here are some books I've mentioned previously:
By the way, there are websites with programming challenges for you to look at too. Like https://projecteuler.net/ and others. Just start looking this up and you'll find plenty. They all tend to start dumb easy and move up the difficulty to pretty damn difficult stuff from what I've heard.
Edit: SICP is available for free (http://mitpress.mit.edu/sicp/) together with videos from the course taught at MIT in 85 (http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-001-structure-and-interpretation-of-computer-programs-spring-2005/video-lectures/).
CompTIA content is too much theory imho and having to renew them every 3 years now seems less appealing to me.
I'd say you head for the CCNA directly. While studying CCNA, you can use the Network+ study materials for any theoretical aspects you don't understand. N+ covers these better than most CCNA study materials.
Security+ is very nice but again, renewing every 3 years is not appealing. However, it does teach you a lot about security processes and a bit of law, compliance and standards.
There are other security certifications, some vendor dependent like the CCNA Security or the Juniper ones. If you're using these products, they are worth having otherwise, there are not many vendor-neutral ones as good as Security+. Careful with some of the vendor-specific ones, they tend to be more like adverts for products instead of certifications, basically "my product can do that!"
For Python, you are right. It's an excellent language for writing quick scripts for automating things. I personally liked Learning Python as reference, but if you're a beginner then Dive into Python3 might be appealing. Head First Python is also good but a new edition is due in 2015 I think.
You might have to choose between Python2 and Python3. Yes there are incompatibilities and not all libraries are available for Python3 yet but if you're starting from scratch, start with Python3 directly.
These are books I actually own and would recommend. Of course there are other great/better books out there, but I'm going to stick with what I've actually bought and read or "read".
I say "read" because several books are NOT meant to be read cover-to-cover. These typically have about 1/3 that you should read like normal, and then skim the rest and know what's in the rest so that you can quickly reference it. These books are no less important, and often even more important. I've marked these kind of books as #ref for "read for reference". Normal books that should be read cover-to-cover are marked #read
For learning your first language: This is really the hardest part and unfortunately I don't have any books here I can vouch for. I started with "C++ for Dummies" and am not including a link because it's bad. Your best bet is probably "Learning <language>" by Oreily. I also love the Oreily pocket books because you can carry them and skim while on the bus or the john, but you can just do the same with your smartphone. Pocket Python, Pocket Java, Pocket C++
Top Recommendations:
Accelerated C++ #read Made for people who already know another language and want to pickup C++. Also great for people who need a refresher on C++. I really like how it doesn't start with OOP but gets you familiar with the imperative parts of C++ before diving into OOP.
The Algorithm Design Manual #ref This is my new favorite book and the first I would send back in time to myself if I could. Each algorithm & data structure is given a mathematical breakdown, pseudocode, implementation in very readable C, a picture (very helpful), and an interesting war story of how it Saved The Day.
Cracking the Coding Interview #read I originally avoided this book like the plague because it represented everything I hate about coding interviews, but many interviewers pull questions straight from this book so this book can equal getting a job. Put that way, it's ROI is insane.
The Pragmatic Programmer #read Must-have for any profressional software engineer that covers best-practices for code and your growth. You can also find the raw tips list here
Head First Design Patterns #read Many prefer the "GoF/Gang of Four" Design Patterns which is more iconic, but Head First is a modern-version using Java to cover actual design patterns used day-to-day by programmers.
For Intermediates:
Effective Java or Effective C++ and Effective Modern C++ #read When you're ready to go deep into one language, these books will give you a huge boost to writing good Java and C++.
Design Patterns #ref You'll want to get this at some point, but early on it's too much for a beginner and many of the patterns are obsolete.
The Art of Computer Programming #ref The programming "bible" but like Design Patterns you should hold off on this iconic book until you've got your basics covered. It would make for a great purchase with your first paycheck or first promotion :)
Fortunately management is a skill that can be learned, just like development. The fact that you're trying to learn is a good sign. Rather than share specific bits of advice, I'm going to share some of the resources that helped me get up to speed.
I found the Manager Tools podcast and related information incredibly helpful when I made the jump into team leadership and management. Doing their version of One on One meetings helped me grow relationships with my team members, and the meetings helped me and my directs stay in tune with the work of the organization. A great place to start:
http://www.manager-tools.com/manager-tools-basics
Mark Horstman is one of the main guys at Manager Tools, and if you start listening, you'll quickly learn that The Effective Executive is his favorite book. I resisted reading it for years because I'm not an executive. I read it a few months ago, and I was silly to wait: if you're a "knowledge worker" or a manager of knowledge workers, you are an executive by Drucker's definition.
Another strong resource (and the first book I read on the subject) is Becoming a Technical Leader by Gerald Weinberg.
And probably the most helpful book I've read in the last year: Communication Gaps and How to Close Them. Most of your hard problems won't be technical in nature: they'll be problems that arise due to missed or misunderstood communications. For instance, with the move from SVN to TFS, setting up TFS and importing your SVN repos is the easy part. Getting the few guys that aren't excited about the move to understand and embrace it will be the tricky part. Back to the Manager Tools guys, they have a phrase: "communication is what the listener does," and everybody listens in different ways. That's why successful changes usually involve repeated and varied communication.
Best of luck!
Absolutely, it's a very clean and easy to use language. It is object oriented and functional which allows someone who has never done functional programming to ease themselves in. Before I started learning scala I only knew python so it was nice that brackets and semicolons weren't really necessary. Higher-order functions are fantastic. /u/bananaboatshoes brings up a good point that scala builds on the jvm so it's usability is the same as java. It also allows you to use java libraries in scala pretty easily. Once you have learned scala going back and picking up java is fairly easy if you find it necessary.
&nbsp;
I'll see if I can't conjure up a few resources.
Scala website
The book I read
A good book on functional programming
&nbsp;
I hope this all is formatted correctly I'm fairly new to commenting on reddit.
*Edited my formatting
Hey OP, nice name. I am going to throw a book out there for you to read instead of spending time on social media. You'll have it done in a few days and some great ideas under your belt to give you positive energy going forward. I replaced toilet/down time on my phone with the book and that helped blast through it ;)
For example I like this bit:
"you don't need a rarified job, you instead need a rarified approach to your work."
Wisdom from Mr cal Newport. Self help author who tackles the conundrum of whether passion should drive your career or not.
Just so happens that Mr cal newport is a CS Doctorate.
Excellent, excellent, knowledge lies within. First book is
"so good they can't ignore you"
Now if that title doesn't spark your interest I dunno what will.
About 15 dollars
So Good They Can't Ignore You: Why Skills Trump Passion in the Quest for Work You Love https://www.amazon.com/dp/1455509124/ref=cm_sw_r_cp_apa_FOQTzbN6B8M1N
If you can't afford it, please DM me, would happily purchase it for you.
Remember in order for good stuff to come out of you, good stuff needs to get in there. Keep on keepin on my man.
(I am a recent grad, beginner in the enterprise, very familiar with ideas like imposter syndrome and the like, but very determined to make my way in the world)
Interesting.
The issue for you here is that BI is really just expected to know SQL, Excel, and Tableau. Maybe some very light programming in R or SAS; but honestly if you knew python reasonably well you would probably have a major advantage over everyone else in most BI departments. I imagine your company changed titles for this exact reason when they realized they didn't need the full skillset of a data scientist/analyst (or didn't want to pay for it). Anyway, most of this stuff is not directly applicable to blockchain so even though you would hypothetically have more credibility simply by the fact you are working with technology, I don't know if it would necessarily give you enough to make the jump to blockchain. An equal concern would be you getting the experience necessary to do so which as I mentioned is not likely.
Of course if you really feel this is your best way to move into tech then by all means go for it. But if I were in your shoes, I would take a second look at cloud. Building cloud based applications will give you experience that is very directly applicable to what you are trying to do. There's also more ways into cloud than data. You can come in through a lower end web/frontend role or even a devops/admin role. There's a lot of resources and employers are more willing to hire 'unconventional' candidates because they need more bodies coding. You can get by with self-learning and then build something eye catching.
I'm not sure if you have seen this already but you might look into this book:
https://www.amazon.com/Mastering-Bitcoin-Programming-Open-Blockchain/dp/1491954388/ref=sr_1_1?ie=UTF8&qid=1527055715&sr=8-1&keywords=blockchain+python
I have read parts of it and it seems very good. It approaches the topic from a programming perspective though, but after you learn python it could be useful to you to align your knowledge of coding with blockchain.
Just do your degree and start exploring ethical hacking, get involved with community.
Personally, I think great ethical hacker needs great understanding of networking, assembly, and OS, all of which you can learn in UofT.
These 3 topics are critical, you actually need to understand how to find vulnerabilities to be great in cybersec.
Also, start attending https://www.defcon.org
This book has been recommended to me as a high level introduction: https://www.amazon.ca/Web-Application-Hackers-Handbook-Exploiting/dp/1118026470/ref=pd_lpo_sbs_14_img_1?_encoding=UTF8&amp;psc=1&amp;refRID=195742DY502NMJ1N4JBT
Also, install cali linux and get some introductory level book on it.
Source: worked for a cyber sec in one of the Big4, worked with ethical hackers, and helped them with security scanning.
bootcamps are helpful in building your professional network, teaching you modern web development practices, and learning how to market yourself as an engineer. Is that worth ~$12,000? maybe, maybe not. It definitely works for some people, though, and usually for people who are motivated and excited about starting a new career.
...and you don't sound that motivated or excited. One book that I wish I had when I was going through my post-college meandering was So Good They Can't Ignore You, which is one of the best big picture career books out there (admittedly, that's faint praise). The basic premise is that the advice of "follow your passion" is mostly bullshit, and that hard-earned craftsmanship is the key to long-term professional success. As someone who's been working for now for ~10 years, his advice really resonates with me.
Relax. There are plenty of good books, but most of them will actually be your course literature in university. You do not gain anything substantial by trying to go through that now. Instead make sure that CS is the right field for you at all. Figure out what studying CS is all about, realize that it will not be like taking programming classes for 4 years. Instead, like I said, work on basic programming skills. Lots of students go into CS without being able to program, and you'll have a much easier time if you have familiarity with practical concepts by then.
If you really want some classic books, though:
It might not fit your specific goals exactly but I am really enjoying C# in Depth.
It's not a 'learn to program' book so he starts with the assumption that the reader has a degree of background knowledge. He focuses on features that make C# unique as a language and explains concepts well. I also find the examples he works to be clear and interesting.
I'm using it as a supplement to a second year programming class and so far it's filling the gaps very nicely.
2-5) What Lamat said.
A good book to study from is The Web Application Hackers Handbook.
Also, prepare for and take the US Cyber Challenge. You don't have to ace it, but if you do decently well (60-70%) you will likely receive an offer to attend a Cyber Camp this summer... this is a week-long series of seminars about all sorts of security topics, with a job fair at the end. It is probably the very best chance you have of getting into an entry-level technical (ie: malware analysis, memory forensics) type security job/internship.
Typically, the challenge will require you to use WireShark to analyze a file of captured network packets. You will analyze the packets to determine whether an attack occurred (from & to IPs, time, what attack method was used.... this is where the handbook I mentioned above will prepare you).
After you've done your analysis (and taken LOTS of notes), you take the test.... it's 24 multiple choice questions such as: What is the IP of the hacker who stole John Smith's bank password? What attack was used from 192.168.21.5 on Mar 10? etc.
When I did the analysis a couple years ago, I had a pad of paper and just went through the whole file writing down the packet number, timestamp, relevant IPs, relevant data (usernames), and what I thought was occurring. So when I took the test, when it asked those questions, I could check my notes to find the corresponding event.
I think I got around a 70% in 20 minutes. Which didn't even put me on the top 100 scoreboard (those spots will be taken by people with 100% in 20 seconds scores). But I still was offered a spot at the cyber camp.
There's good advice here. Did you master JavaScript on the way to CoffeeScript? If not, pick up Crockford's Javascript: The Good Parts - actually, either way, read that book if you haven't already.
If you know JS well, you should do a couple of side-projects in Meteor. It's an interesting framework that embraces "Reactive Programming".
Here's a few other things:
Good luck!
Awesome exactly what I was looking for. I did order 3 books on Amazon yesterday.
Data Structures and Algorithms
http://www.amazon.com/gp/product/0201000237/ref=oh_details_o00_s01_i00
C# In Depth
http://www.amazon.com/gp/product/1935182471/ref=oh_details_o00_s00_i01
C# In a Nutshell
http://www.amazon.com/gp/product/0596800959/ref=oh_details_o00_s00_i00
I did a little research and those came up as great books. I did get them used though, totaling 60 dollars free shipping with prime. Any good recommendations for a design patterns book?
Closures are actually a somewhat important concept in Javascript. If you don't understand them then one day you'll probably get some weird
this
bug working with callbacks and you'll waste more time than you need to trying to figure out what's going on.This is just my personal experience, but I felt that when I had a Javascript interview coming up I would always take some time to review this book:
https://www.amazon.com/JavaScript-Good-Parts-Douglas-Crockford/dp/0596517742/ref=sr_1_1?ie=UTF8&amp;qid=1501136583&amp;sr=8-1&amp;keywords=javascript+the+good+parts
It's worth it to read in my opinion, it covers pretty much everything you would probably be asked in a Javascript interview, and it's very short.
It helps me a lot with Javascript stuff. The other stuff, like the Java stuff, you could probably just google it. There's a standard set of OOP questions that interviews just like to ask all the time.
http://java-questions.com/oops-interview-questions.html
I've always been a huge fan of how Udi Manber covered it in Introduction to Algorithms: A Creative Approach. He relates algorithm design to induction proofs.
You can compare of greedy algorithms to weak induction where you assume something is true for n and try to solve/prove for n+1. Dynamic programming algorithms are more like strong induction where you assume something is true for 1…n and then try to solve/prove for n+1.
It's been 15 years since I took my first class using that book and, to this very day, I follow the same pattern whenever I have to design a new algorithm (which is admittedly rare these days since I'm in management now).
I've been a product lead on public-benefit tech for ~10 years. We [work on things like this] (http://devsummit.aspirationtech.org/index.php?title=2012_Agenda) day to day. We build neat things, sometimes well. You should join us!
Here's some groups to get your brain working:
I worked with some of the above. You'll notice that all of these involve doing straight up software engineering, and it just happens to serve someone other than wealthy first-worlders.
You might look at this book for some general guidance on how to set your own path through the world:
The most recommended books usually are on this list:
Also, I just heard about these two books and they are supposed to be good as well:
If you're interested in the world of startups, I would also highly recommend this book:
I liked https://www.amazon.com/Functional-Programming-Scala-Paul-Chiusano/dp/1617290653 and https://underscore.io/books/advanced-scala/
Underscore has other free books too.
I did what I could from those books , wrote Scala and then went back to the those books. Haskell is cool too. I've found it pretty hard even though I'm comfortable in Scala. There's r/Scala too
Outstanding answer my man!! I have been interested in getting into blockchain development as well, and I am planning to do a project on it for my networks course this semester. My experience mainly lies with C++, and I'm comfortable with sockets as well in it(boost and regular UNIX sockets), I also did take a distributed systems course as well.
Any ideas for a semester long project? I am currently reading [this] (https://www.amazon.com/Mastering-Bitcoin-Programming-Open-Blockchain/dp/1491954388/ref=dp_ob_title_bk#reader_1491954388) and this to get started.
The feedback about "jargon for development" can be solved by going through some books cover to cover, making sure you understand the theory, and implementing the exercises. I understand that feedback to mean that the person who gave the feedback believes there is too high a chance you will inflict damage on the codebase by making decisions not grounded in solid theory.
Examples of titles that are classics and widely known:
Algorithms (4th Edition): https://www.amazon.com/Algorithms-4th-Robert-Sedgewick/dp/032157351X (there is an accompanying coursera course).
Code Complete: https://www.amazon.com/Code-Complete-Practical-Handbook-Construction/dp/0735619670/ref=sr_1_1?s=books&amp;ie=UTF8&amp;qid=1469249272&amp;sr=1-1&amp;keywords=code+complete
Clean Code: https://www.amazon.com/Clean-Code-Handbook-Software-Craftsmanship/dp/0132350882/ref=sr_1_1?s=books&amp;ie=UTF8&amp;qid=1469249283&amp;sr=1-1&amp;keywords=clean+code
Functional Programming in Scala: https://www.amazon.com/Functional-Programming-Scala-Paul-Chiusano/dp/1617290653/ref=sr_1_2?s=books&amp;ie=UTF8&amp;qid=1469249345&amp;sr=1-2&amp;keywords=scala
Learning Python: https://www.amazon.com/Learning-Python-5th-Mark-Lutz/dp/1449355730/ref=sr_1_1?s=books&amp;ie=UTF8&amp;qid=1469249357&amp;sr=1-1&amp;keywords=learning+python
Effective Java: https://www.amazon.com/Effective-Java-2nd-Joshua-Bloch/dp/0321356683/ref=sr_1_5?s=books&amp;ie=UTF8&amp;qid=1469249369&amp;sr=1-5&amp;keywords=java
Haskell Programming From First Principles: http://haskellbook.com/
I included multiple languages as well as language-agnostic ones. Functional programming is the near-to-medium term future of software engineering, and most languages converging towards that as they add functional features.
I don't think bootcamp is required. Learning how to learn is the most important thing. If you get into these books, lose track of time, and feel "aha! that's how these things that I previously thought were unrelated are actually the same thing!", and are able to keep it up for weeks, then that is a good sign that you can get to where you want to be.
I'm just about to graduate with my undergrad in CS with a specialization in HCI, and have had multiple UX internships. Read these two books, they'll provide a really good baseline of knowledge about user-centric design.
The Design of Everyday Things - Don Norman
Don't Make Me Think - Steve Krug
While the second one typically focuses more on web, they're both amazing books that should be in the library of any UX/HCI specialist.
The best way to start building a portfolio is to, well, just do. Find anything (not just a program/app, even) that you don't like the design of, and start from there. Try and redesign it to make things easier to figure out. Show it to others to gauge reactions and get feedback. Iterate and improve.
There are a bajillion different programs for UI prototyping, but the first tool I'd suggest is good ol' pencil and paper. Get yourself a sketchbook and keep it in your backpack (or with you in some other capacity) at all times. When you have a design idea, drop everything, make a quick sketch, and go back to what you were doing. Ideas are fleeting and temporary, so it's best to get it on paper before you forget. Once you've got time, try and improve on those designs and think of what would work and what wouldn't. After you're happy (and have shown it to others for feedback), take it into some prototyping app like Balsamiq, Indigo Studio, or Sketch. Render it in high quality and start seeing how users would react to it in its natural setting (put it on a phone, or on a computer, etc. for testing). It's all about getting user feedback because one person on one computer may not have all the right ideas.
tl;dr: Read books. Redesign crappy things. GET A SKETCHBOOK. Feedback, feedback, feedback.
It's time complexity of algorithms. It's asking for big O, which is worst possible time your algorithm would take given a data input, usually n being the size of the array/list or whatever.
Hash tables are 0(1) because true hash tables uses a function to map 1:1 for all given inputs. For fun(y) => x, every x is generated by a unique y. If it's not a true hash table (ie not a 1:1 map), then you use chaining or bucketing. Chaining is guaranteed 0(n) time and uses no extra space and bucketing is guaranteed 0(n+t) where t is the largest bucket but requires extra space (tradeoffs!).
It's important because it's efficiency. You can program things 1000 ways. Given an input of 10 items, algorithm A (lets say runs in O(n)) and algorithm b (runs in O(n!)) may perform in nearly the same time and produce the same output. But given a list of 100000 items, algorithm B would take years to complete the task, when algorithm A would do it in ms.
Although I'm just about to graduate and don't have a real job yet, I recommend picking up something like this. You can find a pdf with minimal effort. The first few chapters really nail into it well.
This is excellent: https://algs4.cs.princeton.edu/home/
Properly explained, properly scoped and well thought out. It's not as encyclopedic as others but I think that's a positive. The coursera online course is based on it.
This one is also good:
https://www.amazon.com/gp/product/0201120372/ref=ppx_od_dt_b_asin_title_o00_s01?ie=UTF8&amp;psc=1
Non-fiction:
Fiction:
If I was to make a guess, it is that your problem is not your technical skills. You can be the best programmer in the world, but if there are behavioral or cultural red flags you can have huge problems finding a job. What does a Google search for you turn up? How do you act in interviews? How are you to interact with? Those kind of things. A good starting point for addressing these issues is Land the Tech Job You Love. For general career development I have enjoyed The Passionate Programmer personally.
I suggest you read some books that focus more on the general topic, IMO they provide more information and are more understandable.
Back when I was in university the first book about A/DS I read was "Algorithms and Data Structures" by Niklaus Wirth. I've looked it up now and it's freely distributed by the author in PDF format. http://people.inf.ethz.ch/wirth/
Then I read "Data Structures and Algorithms"
by Aho, Ullman and Hopcroft https://www.amazon.com/Data-Structures-Algorithms-Alfred-Aho/dp/0201000237
and "Introduction to Algorithms" by Cormen, Leiserson, Rivest and Stein https://www.amazon.com/Introduction-Algorithms-3rd-MIT-Press/dp/0262033844
Those books overlap in many parts, but it never hurts to re-read about a subject to better understand and memorize it. The first book is smaller in volume as compared to the other two, so it might be a good start, but judge for yourself - look at the tables of contents and compare what you find more appealing.
Here are some books to get started (they are available online for free)
&#x200B;
https://www.amazon.com/Head-First-SQL-Brain-Learners/dp/0596526849/ref=sr_1_1?keywords=head+first+sql&qid=1563487682&s=gateway&sr=8-1
&#x200B;
https://www.amazon.com/Automate-Boring-Stuff-Python-Programming/dp/1593275994/ref=sr_1_2?crid=1P184JBOKVQAL&keywords=automate+the+boring+stuff+with+python&qid=1563487721&s=gateway&sprefix=automate+the+%2Caps%2C132&sr=8-2
&#x200B;
These books will put you in a position to create some interest in the subjects and then you can read the standard textbooks to go deeper and gain mastery
for sql Advanced
&#x200B;
https://www.amazon.com/SQL-Cookbook-Solutions-Techniques-Developers/dp/0596009763/ref=sr_1_3?crid=3GKVQHG48HTXT&keywords=sql+cookbook&qid=1563487850&s=gateway&sprefix=sql+cook%2Caps%2C134&sr=8-3
&#x200B;
https://www.amazon.com/Learning-Python-5th-Mark-Lutz/dp/1449355730/ref=sr_1_3?keywords=Learning+python&qid=1563487873&s=gateway&sr=8-3
Debugging by Agans is great on debugging; my last company liked it so much they bought all the devs a copy, and I think that in turn was inspired by a course at the local university requiring the book.
Read some easy beginner's book like Head First C# to get initial grasp of a language and after you finished with it read C# in Depth. If you really want to understand what is happening pick up CLR via C#.
Also always follow Code complete religiously and you will be better than most.
It does look like spam. Sorry.
I did not buy the course, but I've watched a few of his videos on YouTube. His thesis is to think of your career as a business, and to learn how to market yourself so that work comes to you, not the other way around. Pretty insightful stuff.
Irregardless, $299 is way overpriced. You can find the same advice in Chad Fowler's The Passionate Programmer.
Always be learning.
Carry a notebook around with you. I usually use the cheap ones with metal spiral binding. At the end of the "back to school" sales, they can be like 25 cents each, so I stock up for the year. In this journal keep notes of what you do each day. Also things like server names/configurations, bugs, tips on using tools like bug tracking, other workers, conference calls. I'd write dates on the front cover (start & end date so you can go through a pile of them real fast). This way you can look back at something you did a couple weeks ago and find it easily. In college, I'd keep one of things I read (books, journals, blogs). You might want to keep your research one separate from your work one.
One book I recommend is Passionate Programmer. The title for the first edition was "my job went to India". The 2nd edition covers lots of things you should know about working in companies. Most folks will learn them eventually. Reading lets you save lots of time and pain for education. Despite what we want to believe, America is not a meritocracy, some amount of politics is essential to survive in any job. Some companies need more than others.
In some companies, being on IM or skype is seen as screwing off. In others it will be seen as an essential work tool. Pick the hills you are willing to die on.
Find blogs and podcasts/videos for your frameworks. When you have some decent expertise there, expand to other frameworks/languages. Don't get pigeonholed into one tech. If that tech dies, you're unemployed.
Stay physically active. Gym, walking, running, biking. Something. It helps fight off depression and keeps you mentally fit as well.
Steve Yegge's 5 Essential Areas
When I was preparing to interview I broke up the studying into the 5 areas mentioned in Steve's post. From my experience, the two most critical things are:
If you have never written code on a whiteboard, you need to practice -- it isn't natural and will almost certainly trip you up. For the data structures, try explaining something like a heap or a map a friend who has no background in CS. It will get you comfortable talking about that kind of stuff and also help cement your knowledge. This book is excellent as a resource.
Check out Structure and Interpretation of Computer Programs.
https://www.amazon.com/Structure-Interpretation-Computer-Programs-Engineering/dp/0262510871
I'm pretty sure you can find a PDF for free, if that's too much.
I haven't been in or done a junior dev interview in a long time so I can't speak to whether most companies ask algorithm questions these days.
What I can say is that many of the mid- and senior-level interviews I've been in do. This means, to me at least, that you should learn this stuff even if you don't get asked it in a junior dev interview.
As as self-taught developer, you have shown that you've got the drive and curiosity to learn a lot of stuff enough to do useful work. That says something. So bravo!
Practicing is a great idea. However, if you're constantly looking at the hints before coming up with your own answer, that's probably not as helpful. It sounds like you should learn more about algorithms as a whole topic.
To shore up your weaknesses with algorithms I'll suggest a few resources that I've come across over the years. Since I went the traditional CS degree route, I haven't used these personally but I know many people who recommend them:
ok dude, i really feel for you and see that you're struggling in this thread. i personally understand the lesson /u/csp256 is trying to teach you, because i learned it the hard way myself. but because it's just reddit comments its hard to put it eloquently.
everything about all of your comments and your post just absolutely screams to me that you are due for a mindset shift like i had 2 years ago. in a few words, stop focusing on what you want or what's right for you, and start focusing on what you can bring to the table. you NEED (i seriously mean NEED) to read this book. i absolutely implore you to please for the love of god read this book. in fact, i'm going to message you in 2 weeks to see if you have and i want to hear your thoughts on it. capische?
Did you do any OOP in your Java class? If yes, you understand the concepts which is what matters. The rest is just learning the syntax the language uses to express them.
A universally recommended C++ book around the internet is Accelerated C++. I read the book last year to refresh my knowledge of the C++ language after not programming in it for a few years. It covers topics really fast (hence the accelerated), and it really does a good job teaching you the material.
I just chose some books that looked good from this list and this one.
The one's I got:
Clean Code
(already read)
Cracking the Coding Interview
Code Complete
Peopleware
Don't Make Me Think
Code (currently reading)
Regular Expressions Cookbook
Head First Design Patterns
C++ Primer
Working Effectively with Legacy Code
Elements of Programming Interviews in Java
The Mythical Man-Month
The Design of Everyday Things
JavaScript and JQuery
I figure that's enough reading material to last me until I graduate.
It's going to be hard, make no mistake about it. Most places won't want to interview you just based on the fact that you haven't worked for 10 years after graduating. There's going to be some level of disappointment and you'll need to be ready for it.
If your knowledge of C++ comes from school, it's likely at a basic level. Improving on C++ is generally harder than just learning .Net, Java or python.
But if you do feel comfortable with C++, I would suggest getting a more advanced level book rather than relying on online tutorials. My favorite one is Effective C++ from Scott Meyers. Try finding a used version to save money.
You will also need to meet recruiters and be confident but open with them. This is a trial and error with a low hit rate but I would suggest doing it anyway.
You could also sign up for a coursera or udemy course on web development and start creating a project. Make sure you get a github account to showcase your web development skills to any potential employer.
Read Effective C++ and Effective modern C++. In my opinion, theses books are miles away from any online guides. There's some pdf of those books on some (not legal) webite, but they are a very good purchase.
I have most of these books.
The Art of Computer Programming
The Art of Computer Programming is dense. It is deep. You can likely put off this one. It should be a goal to be able to get through it though.
Introduction to Algorithms
Introduction to Algorithms, I don't have it. All I know is that it does come highly recommended.
Code Complete
Code Complete is excellent. Well written, it feels a lot shorter than it is. It will get you thinking about every step of the software development process.
The Pragmatic Programmer
Another one I don't have but gets recommended time and time again.
The Mythical Man Month
The Mythical Man Month is less directly relevant. It will go over meta issues in software development.
Don't Make Me Think
Don't Make Me Think is also not about code itself, but about design. Because if no one uses your application, does it matter if you made it?
Hiya. Are there any books you would recommend to someone wanting to shore up their knowledge on security?
I'm intending to go through the below to get a grasp of the field:
Books:
The Pragmatic Programmer ($30)
Clean Code ($40)
Structure and Interpretation of Computer Programs ($40)
T Shirts ($20-30):
Works on my machine
Hello world
Other:
A nice coffee mug or teapot for the office
Nerdy desk top calendar
Introduction to Algorithms
Structure and Interpretation of Computer Programs
I linked to Amazon but obviously these can be easily found as .pdfs.
http://www.amazon.com/Passionate-Programmer-Remarkable-Development-Pragmatic/dp/1934356344/ref=sr_1_1?ie=UTF8&amp;qid=1422574454&amp;sr=8-1&amp;keywords=A+passionate+programmer&amp;pebp=1422574452299&amp;peasin=1934356344
Read that. Seriously. I am half way through it and it is amazing
> I want to gain knowledge and learn more by reading and thinking
Say no more, I have your answer
I'd read through this book:
http://www.amazon.com/Algorithm-Design-Manual-Steve-Skiena/dp/0387948600
(I've noticed pdfs of that books on some .edu's in .cn, but I'm not going to link those here.) Be prepared for tree traversal type questions.
http://www.amazon.com/JavaScript-Good-Parts-Douglas-Crockford/dp/0596517742
This could keep you busy : )
http://codeidol.com/csharp/learncsharp2/Object-Oriented-Programming/The-Three-Pillars-of-Object-Oriented-Programming/
http://en.wikipedia.org/wiki/SOLID
http://en.wikipedia.org/wiki/SOLID
http://en.wikipedia.org/wiki/SOLID
http://msdn.microsoft.com/en-us/library/ms379570%28v=vs.80%29.aspx
http://msdn.microsoft.com/en-us/library/ms379570%28v=vs.80%29.aspx
http://msdn.microsoft.com/en-us/library/ms379570%28v=vs.80%29.aspx
http://www.amazon.com/Introduction-Algorithms-Thomas-H-Cormen/dp/0262033844
http://stackoverflow.com/questions/1711/what-is-the-single-most-influential-book-every-programmer-should-read
http://en.wikipedia.org/wiki/Dependency_injection
http://www.engineering.cornell.edu/academics/undergraduate/curriculum/handbook/
http://openclassroom.stanford.edu/MainFolder/CoursePage.php?course=IntroToDatabases
(Or the equivalent for your stack) http://www.target.com/p/querying-microsoft-sql-server-2012-mixed-media-product/-/A-14259758?ref=tgt_adv_XSG10001&amp;AFID=Google_PLA_df&amp;LNM|14259758&amp;CPNG=NoCPNG&amp;ci_src=14110944&amp;ci_sku=14259758&amp;kpid=14259758&amp;LID=PA&amp;ci_src=17588969&amp;ci_sku=14259758
Git
Pick One: Java / c# / [C++](http://en.wikipedia.org/wiki/C%2B%2B
Pick One: C / JS
Pick One: Ruby / Python / Lisp
Contribute to open source.
In no particular order:
Structure and Interpretation of Computer Programs
Code Complete
C Programming Language(K&R)
The Pragmatic Programmer
The Mythical Man Month: Essays on Software Engineering
Introduction to Algorithms and/or Algorithms