Reddit Reddit reviews The Pragmatic Programmer: From Journeyman to Master

We found 175 Reddit comments about The Pragmatic Programmer: From Journeyman to Master. Here are the top ones, ranked by their Reddit score.

Computer Programming
Computers & Technology
The Pragmatic Programmer: From Journeyman to Master
Save up to 15% when buying these two titles together.The Pragmatic Programmer cuts through the increasing specialization and technicalities of modern software development to examine the core process--taking a requirement and producing working, maintainable code that delights its users.It covers topics ranging from personal responsibility and career development to architectural techniques for keeping your code flexible and easy to adapt and reuse.
Check price on Amazon

175 Reddit comments about The Pragmatic Programmer: From Journeyman to Master:

u/Nezteb · 43 pointsr/compsci

Some book recommendations:

u/Grays42 · 38 pointsr/IAmA

This book is an amazing book I recommend for anyone who "knows how to write code" and has built a few things. It's a classic. Reading it cover to cover strengthened my coding skills considerably, and lessons I learned from it I apply to every new project I tackle.

[edit:] For example, the DRY principle: Don't Repeat Yourself. Basically, every operation and value in your code needs to be represented once. Two extremely similar functions? Do not copy and paste. Abstract the function slightly and find a way to make it do your two similar operations with the same basic function structure. This keeps your code clean and much easier to modify/maintain.

Need to do the same function in two different classes? Break the operation out into its own class or an abstract class (or other options depending on the language) and make both classes use it, because you'll probably find other similar crossovers that both classes will need. (These cases vary in practice, but you'll get a feel for it.) Hell, on a few occasions I realized after doing this that it was more practical to merge two or more classes into one giant abstract class and write smaller, specific children, and this helped tremendously.

Some situations might arise that this helps:

  • What if the functionality needs to change? You have to remember every place where this function is located, and if you miss one, you introduce errors.

  • What if a third or fourth use case appears with very similar functions? You have to copy and paste again, exacerbating the problem, or you simply use the existing framework you made and verify that it works.
u/feketegy · 25 pointsr/PHP

Every quality software should have tests. So...

Read the unit tests / features tests first. Those will show you how a specific piece of the code works.


  1. Play with composer packages.
  2. Learn about PHP SPL
  3. Learn about design patterns and beyond
  4. Learn TDD, setup PHPUnit, Behat, Mink, PHPSpec
  5. Read PHP The Right Way
  6. Learn about clean code, EBI, DCI and how to put MVC on a shorter leash here: and here and check out the #cleancode IRC channel on freenode
  7. Read a couple of books like: PHP Objects, Patterns and Practice or Code Complete or Clean Code or The Pragmatic Programmer or The Mythical Man-Month
  8. Start an open-source project or contribute to one

    There are a lot to learn and if you really like programming you will never stop learning.

u/cronin1024 · 25 pointsr/programming

Thank you all for your responses! I have compiled a list of books mentioned by at least three different people below. Since some books have abbreviations (SICP) or colloquial names (Dragon Book), not to mention the occasional omission of a starting "a" or "the" this was done by hand and as a result it may contain errors.

edit: This list is now books mentioned by at least three people (was two) and contains posts up to icepack's.

edit: Updated with links to These are not affiliate - Amazon was picked because they provide the most uniform way to compare books.

edit: Updated up to redline6561

u/abstractifier · 22 pointsr/learnprogramming

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.

u/brownmatt · 22 pointsr/programming

I think the two suggestions you'll see the most will be:

Code Complete

Pragmatic Programmer

u/Ispamm · 21 pointsr/androiddev

Don't give up just yet, keep looking.
Do you have a portfolio? if not try to work on a project of your own so you can have something to show.
And if you are considering improving your java skills try work with libraries like:

u/dgonee · 19 pointsr/cscareerquestions

wow. I'm surprised these two aren't listed yet:

Pragmatic Programmer - this one's at the top of my list. I think that every single programmer should read this book.

Effective Java - although it's written for Java there's some great fundamentals in there.

a lot of people also mentioned Clean Code - while some things in there are important, I personally don't agree with everything that Bob writes about

u/[deleted] · 17 pointsr/programming

I think the pragmatic programmer is exactly the right book for you.

It covers a lot of things like testing, general coding concepts, version controll, etc.

u/Ruple · 17 pointsr/EngineeringStudents

>I have some questions about courses andsubjects for computer engineering ( Software Engineering)

CE and SWE are....a little different so I'll just talk to both a little bit.

CE is closer to Electrical Engineering specializing in Computers so you'd take more hardware oriented courses. Most CE curriculums [I've seen] take you through Circuit Theory, Electronics, Digital Systems, Signal Processing, Computer Organization (aka CPU design), Computer Networks, Embedded Systems, etc.

SWE is closer to applied computer science and is more about building applications and the software development process. So you'd start going through a lot of the early Comp Sci courses (Intro to Programming, Language Processors, Data Structures and Algorithms, Operating Systems, etc.) then you'd start leaning towards topics more closely related to building an actual piece of software like Software Project Management or Quality Assurance.

>Are they any books that you recommend to a complete noob ? Internet links ?

Who reads books?

u/Suitecake · 13 pointsr/learnprogramming

Debugging is investigation. Trial-and-error is voodoo.

See "programming by coincidence" in The Pragmatic Programmer, as well as this SO post.

u/LyndonArmitage · 13 pointsr/coding

Don't forget The Pragmatic Programmer

I can highly recommend the Artificial Intelligence for Games book mentioned in this article too, has many useful techniques written in an easy to understand manner.

u/jalabi99 · 13 pointsr/learnprogramming

For one thing, although you may know a few languages (you mentioned Java, Visual Basic, and SQL, which isn't a language per se but you know what I mean), you may not know how to work with remote teams. You may not know how to use code versioning systems like git or SVN. You may not know how to use continuous integration software like Jenkins. You may not know how to use these and more, simply because you were never exposed to them in the course of your studies. And that's perfectly fine. You can't know everything. The problem though is that so many employers expect you to know all these things, even though you may have never even heard of them before this post.

That is exactly why /u/ResidentBiscuit said "the journey has only just begun." It's an exciting time!

I agree with what was said here:

> The Pragmatic Programmer contains 46 tips for software professionals that are simply indispensable. As the name implies, the book avoids falling into any kind of religious wars with its tips, it's simply about pragmatism.

> If you were to read only one book on this list, this is the one to read. It never goes terribly deep into anything, but it has a great breadth, covering the basics that will take a recent college-grad and transform him or her into someone employable, who can be a useful member of a team.

u/hell_onn_wheel · 13 pointsr/Python

Good on you for looking to grow yourself as a professional! The best folks I've worked with are still working on professional development, even 10-20 years in to their profession.

Programming languages can be thought of as tools. Python, say, is a screwdriver. You can learn everything there is about screwdrivers, but this only gets you so far.

To build something you need a good blueprint. For this you can study objected oriented design (OOD) and programming (OOP). Once you have the basics, take a look at design patterns like the Gang of Four. This book is a good resource to learn about much of the above

What parts do you specify for your blueprint? How do they go together? Study up on abstract data types (ADTs) and algorithms that manipulate those data types. This is the definitive book on algorithms, it does take some work to get through it, but it is worth the work. (Side note, this is the book Google expects you to master before interviewing)

How do you run your code? You may want to study general operating system concepts if you want to know how your code interacts with the system on which it is running. Want to go even deeper with code performance? Take a look at computer architecture Another topic that should be covered is computer networking, as many applications these days don't work without a network.

What are some good practices to follow while writing your code? Two books that are widely recommended are Code Complete and Pragmatic Programmer. Though they cover a very wide range (everything from organizational hacks to unit testing to user design) of topics, it wouldn't hurt to check out Code Complete at the least, as it gives great tips on organizing functions and classes, modules and programs.

All these techniques and technologies are just bits and pieces you put together with your programming language. You'll likely need to learn about other tools, other languages, debuggers and linters and optimizers, the list is endless. What helps light the path ahead is finding a mentor, someone that is well steeped in the craft, and is willing to show you how they work. This is best done in person, watching someone design and code. Also spend some time reading the code of others (GitHub is a great place for this) and interacting with them on public mailing lists and IRC channels. I hang out on Hacker News to hear about the latest tools and technologies (many posts to /r/programming come from Hacker News). See if there are any local programming clubs or talks that you can join, it'd be a great forum to find yourself a mentor.

Lots of stuff here, happy to answer questions, but hope it's enough to get you started. Oh, yeah, the books, they're expensive but hopefully you can get your boss to buy them for you. It's in his/her best interest, as well as yours!

u/Heartomics · 13 pointsr/MachineLearning

It would be hard to evaluate yourself. It's probably best to link your Github work to someone and ask for their opinion.


The biggest hurdle is to accept that there's a Pythonic way of doing things.

I think a lot of people's first step to becoming Pythonic is by the way of using List Comprehensions.

Then there's generators, decorators, itertools, functools, collections, etc.

What it takes to be an Expert in Python

I'm sure his Python skill is amazing; I was too distracted by his VIM skill to pay attention.

These are language-specific things but it sounds as though you might want to get familiar with proper Software Engineering principles. Recognizing code smells and trade-offs between different Data Structures and Sorting Algorithms. You can start off with this excellent book on being pragmatic.

Pragmatic Programmer

Here are some youtube links where you can follow along and maybe even adopt their coding style. I don't remember if they are Pythonic or whatnot but I would guess that they are. They focus on projects you would have an interest in.


u/dev_bry · 12 pointsr/learnprogramming

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:

u/pat_trick · 12 pointsr/learnprogramming

If you want to pick up some Cryptography, The Code Book is a great intro.

Pragmatic Thinking and Learning is good for learning to learn.

The Pragmatic Programmer is good for project code planning and learning how to write code in a well thought out way.

Ethernet: The Definitive Guide is a good read if you want to get up to snuff on your networking, though it can be a bit dry at times.

u/mcrask · 10 pointsr/learnprogramming

Code Complete and Pragmatic Programmer are great books about programming as a craft and are both language agnostic.

u/Karzka · 10 pointsr/gamedev

Not game-specific, but these books are definitely industry essential books when it comes to anything related to software development.

In no particular order (though Code Complete should probably be first):

u/SofaAssassin · 10 pointsr/cscareerquestions

> So something that would take in excess of 3 years to master is out, if you catch my drift.

You seem to be misguided on this point - while you can pick up the basics/fundamentals of programming pretty quickly, if you're so inclined, the actual practice of writing software, and writing it well, is going to take a lot of time investment. I look back at code/software I wrote when I was just starting out professionally, and while they worked, I know how poorly they compare to what I can write/design now.

Having 3 years of software development experience when starting from zero would probably leave you at 'junior' or 'mid' level at the end, and if you don't have a more experienced developer mentoring you throughout the process, you may be at a disadvantage. From the sound of it, your school has no actual programmers/developers.

With that said:

  • I would look at online resources to start out, like Learn X in Y Minutes or codecademy. Start playing around a lot and doing exercises.
  • For a beginner, a language like Python or Ruby tends to be easiest to start with, as they are simple to install and experiment with.
  • Additionally, learn about databases. MySQL and PostgreSQL are database systems that are widely used and free. Learn about database modeling, schema design, and how to actually write SQL.
  • Understand that pretty much anything you write or make in the first year or so that isn't very simple will probably be horrible hack jobs. You may not think they are, but trust me, they will probably have poor design, use nasty hacks, employ bad practices, and so forth. This is where on-going improvement is a necessity, and why people read books like Clean Code, The Pragmatic Programmer, and Code Complete.
  • Also, a mark of a good developer - assessing whether or not you have to actually write that code or software. I am not familiar with student management systems, but is it really going to be necessary to write your own, from scratch? Think of the following implications:
    • You are now your own support for your software - anyone in the school that has a problem with your app, you become the go-to person for fixing it or answering their questions, no matter how dumb the questions may be.
    • You become the point person for issues in the supporting system of the software - the database and the machines it runs on, primarily. You may be lucky enough to have IT helping you in this aspect, so hopefully you have an IT department that can do things like back up the database, maintain it, and restore it if something breaks.
    • Your software will likely be a hackjob - I do like to stress this point again, because none of us, starting out, turn out good software of moderate complexity without a couple years of experience. Time and time again I look at code written by fresh graduates or junior developers that are basically hacks or need a lot of cleanup/rewriting. Who will look over your code to tell you that?
    • Someone will have to maintain this software - and this will be you, but eventually, you might leave this job, so who will take over for you? Your school should be prepared for this eventuality.
u/vfxdev · 9 pointsr/learnprogramming

Android is java, there is 100 million devices right there.

I know Java, along with a handful of other languages used on the JVM (kotlin, scala). I also use Python quite a bit, C++/ObjC (though I use it much less), and I dabble in JS if needed. I've written perl, php, pascal just to new a few others. Once you learn the fundamentals of CS, you should be able to grasp any C like language pretty quickly. (even C++ if you just keep it simple)

What you should focus on is learning object orientation. Relationships between different objects/classes, their interfaces, and how to actually construct software. Don't worry about language so much yet, you will quickly get the point where you know 5+ languages.

Now go read this book.

Also, I have to say that knowing Java and Python is a sought after combination.

u/0b_101010 · 9 pointsr/learnprogramming

Hi! I recommend the following books:

u/Centinul · 8 pointsr/java

I agree that Code Complete is an excellent book. Another I'd add to the list is The Pragmatic Programmer.

Effective Java is good but it's really about the nuances of the Java language. It looks like you are looking for better programming practices in general. If so I'd go with the books already mentioned.

u/zxxzwqw · 8 pointsr/programming

Pragmatic Programmer is over a decade old, but I doubt you'll more useful advice.

u/jbacon · 8 pointsr/java

Since you're already a programmer: Effective Java, 2nd Edition. That's pretty much your definitive Java language and Java best practices reference.

I would not recommend the Head First series - those are more geared to novice programmers. I don't think you'll have much trouble picking up basic object oriented concepts, which is probably the only thing that book might help you with.

For general programming reading, I recommend The Pragmatic Programmer - great read, lots of excellent advice in there.

u/JohnKog · 8 pointsr/compsci

You probably already have, but if not, definitely read Design Patterns, which is old but a classic. I'd also highly recommend the Pragmatic Programmer.

EDIT: I just want to say, that I also fully support alienangel2's answer. I wanted to recommend a couple good books to get you on "the path", but ultimately, the best thing by far is to find a job that grows you. For some people, the best way to do that is to work at a super small startup, where everything you're building is from scratch. For others (like me), the best way is to work at a company with tons of really smart people who have already built great software, and learning from them and the choices they've made (and why). And if you still feel like you're regressing since school, maybe that's the answer: go back to school (i.e. get a Master's or PhD)!

u/ArmenShimoon · 7 pointsr/csharp

They seem a like reasonable starting point I think. Repetition is the mother of mastery, the more books the better (in addition to applying what is learned).

Since Mosh is calling out learning fundamentals as important to becoming a good C# developers, I would personally also recommend some general (non C# specific books) too for who are starting out in software development:

  1. Design Patterns (Amazon) - also known as the "Gang of Four" Design Patterns, it was originally published in 1994 and is still relevant today. When people talk about design patterns, they're referring to the book more often then not.

  2. Soft Skills (Amazon) - Not a book on programming actually... it's a software developers life manual. The reason I like this book is it covers the other parts of the life of a developer that I haven't seen covered anywhere else. Everything from learning strategies, time management, career advice, and even some health and fitness. It was an enjoyable read and I think other developers would enjoy it too.

  3. The Passionate Programmer (Amazon) It's been a while since I've read this one, but I remember it giving decent advice for building a career in software development. Not to be confused with The Pragmatic Programmer (Amazon) which should be read at some point too.

    There's a ton more, but those are a few that stood out to me. Essentially the more the merrier in my opinion - books, courses, videos, tutorials, and so on. The books I'm recommending here focus on adopting the developer mindset and being successful at it. That's part of the puzzle.

    The other part is understanding the technical details including the programming language and frameworks you intend to use.

    And finally, for learning about C#, I do highly recommend Mosh's videos/courses (some are free on YouTube, others available on Udemy). He's got a unique ability to explain things clearly and simply in a way that beginners can pick up quickly.

    What I'd do is check out his free content first, and if you agree his style is ideal for learning, an investment in one of his courses is well worth it since he'll cover a lot more breadth and depth on each of the topics and they're organized into a super consumable package rather than scouring the internet for various topics.
u/hga_another · 7 pointsr/KotakuInAction

In all fairness to him, it was when you showed enough merit in your work.

And one can make a great deal of progress in 4 years of real world software development. But by the language of highly recommended The Pragmatic Programmer: From Journeyman to Master, you were almost certainly still a journeyman back then. I would guess it took me > 10 man years to obtain mastery.

u/Tefferi · 7 pointsr/JobFair

Two things: The coursework from my CS degree, and reading books about software engineering.

I've spoken in other places about the former, and for the latter, I recommend The Pragmatic Programmer, Code Complete, and Design Patterns: Elements of Reusable Object-Oriented Software

u/c0demonk3y · 6 pointsr/java

The Pragmatic Programmer

Has a lot of similar stuff to Code Complete 2 but not quite as dense so makes a good primer.

u/IRLeif · 6 pointsr/learnprogramming

Looks like most of your knowledge and experience so far is with imperative/object-oriented programming. You might want to have a look at functional programming, just to get some perspective. Scala, Erlang or Haskell could be some good choices here, or even Ruby (if you make use of blocks and don't use mutable data). Actually, Ruby is pretty cool and very versatile and practical, that could be a good language choice as well, and you would also be able to make use of your prior knowledge with OO programming.

One other thing that you could do with this time is to read some books! There are some wonderful "generic" titles that every programmer should read, in my opinion. Have a look at The Pragmatic Programmer, Clean Code and Code Complete, for starters. These might get you really inspired and pumped up for the undergrad college and computer science classes, as well as give you some good tips on new things to learn.

u/Gardar · 6 pointsr/compsci
u/baultista · 6 pointsr/AskReddit

> Knowing one programming language, is of course, a must for any sort of programming. Knowing many programming languages is a bit less important, in a way. Many languages are very similar to one another and aside from the keywords, the syntax largely remains the same. If you've done Java before, then this means you could very well hold your own in C++, C#, and VB.NET for example.

I'd disagree strongly on this one. Writing VB.NET is very different from writing C++. I'd argue that programming language paradigm is more important. It's easy to switch between languages following the same paradigm because, beyond frameworks, libraries, and syntax, they are very much the same.

>Whenever possible, seek to make your functions about a screen's height. It's easier to follow the flow if you don't have to scroll up and down all the time.

Huh? That's a weird way to explain it. What's more important than number of lines is the Single Responsibility Principle. Every contextual item in your program (class, method, variable, etc) should only have one responsibility.

Otherwise I'd agree with this advice. For these little quips like these check out The Pragmatic Programmer, which is perhaps one of the best books that helped me move from a novice/junior developer to an intermediate/senior dev.

u/Constantine_V7 · 6 pointsr/cscareerquestions

This list isn't about "coding" per-se but is more focused on concepts, sw.en., practices, etc.

Thinking in Java is one of my favorites, the definitive introduction to object oriented programming and design.

Code Complete, Don't know anyone who hasn't heard of this so far

The Pragmatic Programmer: From Journeyman to Master

u/obeleh · 6 pointsr/compsci

Perhaps offtopic but... Some books you should read regardless of CompSci branch

u/nthcxd · 6 pointsr/cscareerquestions

First of all, this is an excellent post. I've seen so many questions posted here but yours is the most concise and upfront. I know exactly what your background is and so I'm more confident that what I want to suggest would actually be relevant.

You have solid industry experience with academic foundation. And I think you already are aware of the pitfalls of expert beginner ( I think you are in a sweet spot where you can afford to invest resources without immediate gain - unlike early-career coders, you don't have to necessarily learn another language/framework right this second. You can afford to deepen your higher-level understanding of concerns and concepts that are timeless and not bound by the language/framework of the day.

I'd like to suggest you read other people's code/design. Here are some books to get you started.

u/random314 · 5 pointsr/learnprogramming

Read The Pragmatic Programmer

It is exactly what you're looking for.

You have to under the concept of uncoupling your programs and break them up into separate entities and that takes practice. This book will show you a few main guidelines to follow but without application you will not get pass that wall.

Don't want to bullshit anymore? put yourself in a position where you can't bullshit. Get a job as a webmaster, it's not very hard. Smaller non-technical companies would love to hire college kids to build an internal inventory tool or something that they can use.

u/asiefker · 5 pointsr/compsci

The Pragmatic Programmer ( It's a great resource to help you think about your career and how working as a software developer is different from what you learn in school.

u/IthinkIthink · 5 pointsr/programming

The Pragmatic Programmer

I should re-read for a refresher. Invaluable source of general information that can help any type of computer programmer, regardless of their language of choice.

u/NowTheyTellMe · 5 pointsr/UCI

So this is what I would consider the "Core" reading list for anyone interested in programming games. None of this is really game specific though. These are just the fundamentals you need in order to be an effective Software Engineer.

Learn about...

C++ syntax: Programming: Principles and Practice Using C++ by Bjarne Stroustrup

Software Engineering: Code Complete by Steve McConnell

C++ gems: Effective C++ by Scott Meyer

Software Teams: The Mythical Man-Month by Frederick P. Brooks Jr.

Why we love Joel: Joel on Software by Joel Spolsky

Problem Solving: The Pragmatic Programmer by Andrew Hunt

Common Code Solutions: Head First Design Patterns by Eric Freeman

Pearls!: Programming Pearls by Jon Bentley

I'll do a supplemental on this in a few days that dives into specific topics related to engine development. All of this is generic enough that it will help you regardless of what you do. You'll notice that very little here is actually language specific. Almost all of this is about the art of making software and process of working with a team. These 8 books alone will make you think about making software in a whole new way.

u/hendrikdelarey · 5 pointsr/computerscience This is a book I usually advise junior developers to read. Another one is Clean Code by uncle Bob.

u/doubles07 · 5 pointsr/learnpython

The book Clean Code was recommended to me by my manager when I asked about writing more efficient code. The author goes through best conventions of naming/organizing/etc for keeping your code base super clean and legible. Other people also recommended the Pragmatic Programmer, but I haven't had time to get to it.

u/sh0rug0ru · 5 pointsr/java

Read lots of code and read books to get multiple viewpoints. This is a deep topic which will require more than superficial online reading.

Check this out.

Books I have found useful:

u/EllipsisUser · 5 pointsr/java

The Pragmatic Programmer: From Journeyman to Master

It's not really focused on Java or any language specifically, but it helps you become a better team member. The concepts help you write code you won't curse at later...

u/mredding · 5 pointsr/compsci

I can't speak of a specific book that is a comprehensive history of computing, but I will speak to books that speak of our culture, our myths, and our hero's.

Hackers and Painters, by Paul Graham. People are polarized about the man, whether he's too "pie in the sky" - full of shit and ego, or if he speaks as an ambassador to our most optimistic ideals of our (comp-sci) culture. The contents of this book is a collection of his essays that are inspirational. It made me forego the societal pressures within our culture and reject popular opinion because it is merely popular and just an opinion, which is a virtue no matter who you are, where you are, or what you do. All these essays are on his website, though. If you want to review them, I recommend Hackers and Painters (the essay), What You Can't Say, Why Nerds are Unpopular, and The Age of the Essay; his oldest essays are at the bottom of the page and go up - he writes about what he's thinking about or working on at the time, so you'll see the subject matter change over time. So much of this will have direct application to his middle school and high school life. I cannot recommend this book, and the rest of his essays, enough.

If he wants to get into programming, I recommend The Pragmatic Programmer. This book talks about the software development process. I'm not going to lie, I don't know when best to introduce this book to him. It's not a hard read whatsoever, but it's abstract. I read it in college in my first months and said, "Ok," and put it down. Approaching the end of college and my first couple years in my profession, I would reread it ever 6 months. It's a kind of book that doesn't mean anything, really, without experience, without having to live it, when he has an obligation to his craft, his profession. I tell you about this one since you're asking about books to tell him, because this isn't something someone would normally come up across without being told about it.

The Cathedral and the Bazaar is a telling book about the cultural differences between the proprietary monoliths like Apple and Microsoft, and the Free and Open Source Software communities that back such popular software as Linux (the most popular operating system on the planet, running on all top 500 super computers, most server computers on the internet, and all Android phones) and Chrome(the worlds most popular web browser). Indeed, this book directly reflects the huge cultural battle that was duked out in the field, in the industry, and in the courts from the mid-90s and into the 2000s. It advocates helping the community, contributing to something larger than yourself, and that none of us are as good as all of us. To paraphrase Linus Torvalds(inventor of Linux) "Given enough eyeballs, all bugs are shallow."

It's important to know who the hero's are in our culture, and they are diverse and varied, they're not just computer scientists, but mathematicians, physicists, philosophers, science fiction writers, and more. I would find a good book on Nicola Tesla, since he invented basically everything anyway (Thomas Edison was a great businessman, but a bit of a tosser), Richard Feynman was a physicist who is still celebrated in his field, and he even worked for Thinking Machines, back in the day, which was a marvel of it's time. Seymour Cray founded Cray Supercomputers and they have a lasting legacy in the field, a biography on that would be interesting. A biography on Symbolics and their Lisp Machines will make him yearn to find one still functioning (a rare gem that crops up every now and again, though he can run one in an emulator), and about the "AI Winter", a significant historic era (note: the AI Winter is over, and we are in spring, the history is both compelling and enthralling). Anything Issac Asimov published (in nearly every category of the dewy decimal system) is also compelling, and hardly dated. In fact, he's the originator of a lot of modern sci-fi. Charles Babbage invented the modern computer (though it was entirely mechanical in his day, and it wasn't actually built until 1996-2002) and Ada Lovelace was the worlds first computer programmer. A woman! Speaking of women, and it's worth young men learning this about our history, Grace Hopper was a military computer engineer who invented the term "bug".

And speaking of women, someone I have respect for, especially if your boy wants to get into game development is Sheri Graner Ray's Gender Inclusive Game Design, which may be more appropriate when he's in high school, and I consider it required reading for anyone who wants to enter the gaming industry. The book lays out plainly how video games hyper-sexualize both women, and, for some reason surprisingly to many - men, it's disastrous effects it has for the game industry, the game market, and the gaming community, and insights on how we may combat it. I have seen colleagues (men) become indignant and personally offended at reading this book, but were absolutely humbled when they took the fight to Sheri directly (we had a few phone interviews with her, always fantastic). If your boy found a problem with this book, he would do well to read Paul Grahams essay on keeping his identity small... The subject matter is not a personal attack on the individual, but on the blight, and he would be better served finding himself on the right side of history with this one, it would serve him well if he were to pursue this craft, specifically, but also any forward facing media in general.

And I also recommend some good books on math. Algebra, linear algebra, calculus, and statistics. You can get very far, lead an entire career unto retirement without knowing anything more than arithmetic and basic, basic algebra, but he could only serve himself well if he makes the decision that he is going to like maths and chooses to willfully become good at it. Outside the context of school and terrible teachers, it's actually an enthralling subject. Just get him a copy of Flatland, Flatterland, and Sphereland. Try this. There are books about proofs that break them down into laymen terms so that anyone can celebrate how special they are. My wife has a few on the shelf and I can't remember their titles off hand. Also this, the book is the narrative of some witty laymen who discover a whole branch of mathematics from first principles, the surreal numbers, an extension of imaginary numbers. It's really quite good, but might keep him occupied for a couple years in high school.

I should stop here or I never will.

u/th3byrdm4n · 5 pointsr/compsci

The Pragmatic Programmer: From journeyman to Master. It's a philosophical book that shares wisdom on how to think like a programmer. . . Not in the pure sense making you a better Computer Scientist (in terms of thinking algorithmically) but if you write code you should give this one a thumb through.

u/thatsnotgravity · 5 pointsr/learnprogramming

Pragmatic Programmer, Clean Code, and Head First Design Patterns come to mind right away. They're 3 of my favorites.

There's also Design Patterns by the Gang of Four. That's a lot more dense IMO than Head First, but it's fantastic material.

Since you're looking to jump ship and start interviewing, take a look at Cracking the Coding Interview. That will prepare you for any questions you run into during the process.

It's probably also worth brushing up on Algorithms and Data structures.

u/eric_weinstein · 5 pointsr/learnprogramming

Seconding The Pragmatic Programmer and Cracking the Coding Interview. I'd also recommend:

  • Code Complete: verbose and somewhat self-congratulatory, but extremely good.
  • The Mythical Man-Month: a little dated and weirdly religious at times, but has great insights into how software problems are actually people problems and how large projects are (mis)managed.
  • Design Patterns: a.k.a. the Gang of Four book. This one's a classic.
  • Pro Git: you mentioned version control systems. IMHO, you should learn Git if you don't know it, and this book is a great resource.

    If you let us know which languages you primarily write, I can probably recommend some good language-specific titles, too.
u/Captain · 4 pointsr/programming

> In other disciplines, engineering in particular, there > exist treatises on architecture. This is not the current case in software,

Gee I better throw out all those books on architecture since clearly they don't exist.

We can also ignore Fowler's book, GOF, SICP, and TAOCP since clearly they are treatises on software either.

u/oleksiyivanenko · 4 pointsr/learnprogramming

You can read The Pragmatic Programmer
It's a great book about best practices of software development. And you don't need computer while reading it - it's not about code :)

u/bot_bot_bot · 4 pointsr/AskComputerScience

As someone who hated math, this turned out to be one of my absolute favourite books in college:

Probably not what you're looking for though.

Are you looking for pure computer science or do programming books count?

The pragmatic programmer is a great book, and an enjoyable read:

u/Kaelin · 4 pointsr/compsci

Study design patterns and read books by the masters.. Find the books that are recognized by the community as "the best". For example "Effective Java" is one of the best books on writing Java beyond the basics.

The Pragmatic Programmer: From Journeyman to Master

Design Patterns

u/Remover · 3 pointsr/programming

I just picked this up the other day, and was surprised how good the advice was. It's geared towards programmers, but has a lot of interesting lessons that can be appplied to anything.

Pragmatic Programmer: From Journeyman to Master

u/sastarbucks · 3 pointsr/UKPersonalFinance

First off starting with some non financial advice stuff

It seems you have things sorted from a technical ability perspective but when it comes down to requirements and understanding what is needed that is something you might fall down on.

This happens a fair bit to be honest with you as systems can get a lot more complex and you are at the mercy of any business analysis which might be done, so as you say you can deliver "it" if you know what "it" is, that comes from experience but can be learnt in other ways.

Couple of book links:

u/introspeck · 3 pointsr/eldertrees

First book I recommend to any programmer, no matter what they're working on, is The Pragmatic Programmer. Excellent stuff.

If you don't get a shot at low-level coding at work, get yourself an Arduino kit and just hack away. Apparently the language is similar to / based on the C programming language. I use C every day.

To do well with embedded systems, real-time, device driver, or kernel type stuff, you have to really, really, really, understand what the hardware is doing. I was able to learn gradually because I started programming when there was one CPU and no cache memory. Each hardware operation was straightforward. Now with multi-core CPUs, multi-level cache memory, multiple software threads, it becomes a bit more complex. But something like the Arduino will teach you the basics, and you can build on that.

Every day I have to think asynchronously - any operation can happen any time, and if they share memory or other resources, they can't step on each other. It can get hairy - but it's really fun to reason about and I have a blast.

There's a lot more I'm sure, but get started with some low-level hacking and you can build from there.

If you want to get meta, many of the best programmers I know love Godel, Escher, Bach because it widens your mental horizons. It's not about programming per se, but I found that it helps my programming at a meta level. (and it'll give you a lot to meditate on when you're baked!)

u/diisiqueira · 3 pointsr/brasil

Cara, reinventar a roda não é ruim! Resolver problemas clássicos é uma ótima maneira de aprender e praticar é a melhor maneira de melhorar em algo. Eu sou o tipo de cara que gosta de aprender as coisas na prática então sou suspeito de falar mas vai lá e desenvolve. Essa minha aposta com meus amigos é justamente para nos forçar a isso, desenvolve qualquer coisa mesmo que seja algo completamente inútil, que é melhor do que ficar parado. Umas semanas atrás, nessa aposta um dos meus amigos desenvolveu um script que calculava se era ecologicamente correto urinar no chuveiro ou na privada, utilidade real do projeto é nula, mas fazendo isso ele já começou a aprender uma nova linguagem e investiu tempo em se tornar um programador melhor. Realmente meu conselho é faça, desenvolva! Uma dica é pegue pequenas coisas do seu dia-a-dia e resolva elas com programação, por exemplo, uma vez eu fiz um script que me perguntava quais ingredientes eu queria em um lanche, ai ele varria o site do iFood e me falava qual era a opção mais barata que eu tinha. Não tinha necessidade alguma de fazer isso, era muito mais rápido fazer uma busca manual, mas na época isso me ensinou a usar a BeautifulSoup e foi super divertido de fazer.

  1. Eu sempre tive a visão de que o mercado python no Brasil é bem mais fraco do que em outros países, não sei ao certo de porque, aqui na minha região por exemplo não conheço nenhuma empresa que seja especializada em python. Por outro lado aqui o grande foco das empresas é o PHP, em todos os níveis. PHP é realmente uma linguagem de entrada, por ser muito aberta e deixar a pessoa fazer as coisas de qualquer maneira, acaba sendo muito fácil de tornar uma pessoa capaz de criar códigos funcionais em PHP, depois quando aprendem melhor o paradigma da programação, muitas acabam migrando para outras linguagem.

  2. Atualmente eu tenho dois livros que ficam grudados na minha cabeceira da cama, e leio um pedaço todos os dias quando acordo, são eles o Clean Code e o Design Patterns. Tambem to de olho no The Pragmatic Programmer.

u/PunnyYolks · 3 pointsr/learnprogramming

The Pragmatic Programmer. Now I've never actually read this book but I plan on it eventually. You could read some of the reviews and look up other reviews somewhere else to see if it meets what you're looking for. Btw, are you studying the version of CS50 on their website?. I've been watching this as well but I've been programming for a few years now. If this is your first time and you're not completely understanding what's going on in that class it's ok. That class seems to move quite fast and sort of jumps around without detailed explanation. Make sure you're doing the projects along with the class, watching videos alone won't get you anywhere. Trust me on that one.

u/frostmatthew · 3 pointsr/WGU

tl;dr version:

  1. yes
  2. no, but that will be the case at any school

    Quick background to validate the above/below: I was a 30y/o banquet manager when I decided to change careers. I had no prior experience [unless you want to count a single programming class I took in high school] but did get a job in tech support at a medium size startup while I was in school and wrote a couple apps for our department. Just before I graduated I started working at a primarily Google & Mozilla funded non-profit as their sole software engineer. I moved on after a little over two years and am now a software engineer at VMware.

  3. The degree is a huge boost in getting past HR and/or having [good] recruiters work with you. You'll also learn the skills/knowledge necessary to get hired as a developer, which is obviously the more important part - but for the most part this is all stuff you can learn on your own, but you'll greatly reduce the number places that will even give you a phone screen if you don't have a degree [I'm not saying this is how it should be, but this is how it is].

  4. I typed out a lot before remembering New Relic had a great blog post a few months ago about all the stuff you don't learn in school [about software development], ha. So I would highly recommend you not only read it but also try to learn a little on your own (especially regarding SQL and version control) Being a good developer (or good anything) takes time/experience - but knowing what they don't cover in school (and trying to learn it on your own) will help.

    Two books I'd suggest reading are The Pragmatic Programmer and Code: The Hidden Language of Computer Hardware and Software. Pragmatic Programmer is one of those classics that every good dev has read (and follows!). Code is great at giving you some insight into what's actually happening at a lower level - though it gets a bit repetitive/boring about halfway through so don't feel bad about putting it down once you reach that point.

    The best thing you can do to help you land a job is have some open-source side-projects (ideally on GitHub). Doesn't have to be anything major or unique - but it will help a lot for potential employers to see what your code looks like.

u/Pinski47 · 3 pointsr/dotnet

There are two books I always recommend to anyone who is starting their Software Engineering career.

The Pragmatic Programmer: From Journeyman to Master

Clean Code: A Handbook of Agile Software Craftsmanship

Both of these books were recommended heavily to me when I joined the industry and I wish I would have read them sooner. They manage to boil down years of insight and experience into a couple of interesting and thought provoking reads. I always buy copies for my interns or college graduate level junior developers.

In my experience, good .NET code requires much more structure than front end code. These books can help you get into the right mindset of a .NET developer.

u/cnous · 3 pointsr/cscareerquestions

The Pragmatic Programmer

  • you could actually finish it in a summer while engaging in other activities
  • most of the content is generalized and suited for the long-term professional
  • it's very highly regarded
u/attekojo · 3 pointsr/learnprogramming

As far as I'm concerned there's no better source for the information that you need than The Pragmatic Programmer.

u/Timidger · 3 pointsr/programminghorror

I don't know how much reading you've done, but I've also found The Pragmatic Programmer to be a very good read. It talks about the design of a project abstractly, and has held up well over the years (1999 was the publish year!)

u/curious_webdev · 3 pointsr/compsci

Not all on topic as "CS" books, more general programming, but here's a short list. I also suggest the opening chapter or two of a lot of books for stuff you don't know but are interersted in. They're generally just nice easy to read introductions.

u/zoug · 3 pointsr/Omaha

15 is really young. If you're relatively presentable, you might want to try Hyvee.

That said, it looks like from your profile that you have an interest in math and coding.

If this is something you're naturally skilled at, you shouldn't be working in fast food. You should be ignoring temporary financial gains to put yourself in the best place possible for college and technical internships.

The primary way to do that is to double down on your academics. At 15, you'll probably be going into your sophomore year? Don't accept any grade but an A from here on out. There's just no reason for it. You're obviously not retarded and school is easy.

Grab an ACT/SAT prep book. Take every practice test you can find until you get your scores into the absolute highest percentile you're able to.

If available, join a cyber academy, coding, math or robotics club at your school.

Go to things like this:

Read books like these:

You'll lose a few thousand dollars over the next few years from working a shit job but you'll also be able to get a technical internship as soon as you turn 18 making double/triple minimum wage, while you gain proficiency in a relevant field.

You'll also go from $Texas in student loan debt to a free ride, saving you 30,000 to 100,000+ depending on what school you can get into on scholarship.

You may be 15 but I have to disagree with anyone else that you're only worth minimum wage. Everyone has skills they can work on and if you really want to help your family in the long term, work on what will make you successful.

If you have any questions regarding any of this, PM me.

u/UpAndDownArrows · 3 pointsr/learnprogramming

First time see that site, but I would recommend reading:

u/passingby · 2 pointsr/getdisciplined

One of the best things to do is read what other programmers have to say. It opens yourself up to things that you might not normally come across. Schedule a time of the day where you will go on Stackoverflow to answer questions or read answers. Also in that time, read some blogs and any new articles. A few of the websites that I really like:

  • Stackoverflow

  • Coding Horror

  • Joel on Software

  • Wolfire Games (especially since you are into game development)

    Have you caught up reading the classics when it comes to software development? A great list of them can be found here. A few that I have found totally eye opening:

  • The Pragmatic Programmer

  • Programming Interviews Exposed

  • The C Programming Language

    Also, have you used any new technology lately to make something cool? Schedule a time everyday (similar to when you read new things) to work on a project no matter what. Close Reddit, close your email, and get programming! Here a few things I had on the top of my head:

  • Try making a web chat using SocketIO for the messaging and Node.js for the backend

  • Ever used a MVC style framework for web development? Try out something simple like Flask then move onto something more complicated with Django.

  • Learn Haskell

  • Learn a dialect of Lisp

    Hopefully all of these can give you an idea of how to improve.
u/bobboberton · 2 pointsr/learnprogramming

I'd have to agree. Start touring around for tutorials like Khan's or Codecademy, and pick up some books like the Pragmatic Programmer and expand your knowledge base. You can't make it as a business yet - no offense, you're just very outclassed with the massive amount of web developers and designers out there right now.

u/theobromus · 2 pointsr/AskEngineers

To try to answer your question about how to pick up programming concepts.

I'd say there are two parts:

  1. Software engineering practice - this is things like using source control, writing unit tests, splitting your code into pieces that make sense and are easy to test and maintain. A decent book on this topic might be:

  2. Algorithms and Data Structures - great software engineers understand how stuff works and what approaches there are to solve problems. There is plenty of useful work you can do without this knowledge, but you'll only have a surface level understanding of what's happening without it. The classic book on this is probably:

    It is also very useful to learn about things like object oriented programming. A huge help will be reading some code from relatively simple projects and trying to understand why it's written the way it is. You can often find open source projects and read their code and try to understand why they did things a certain way (although a fair warning, there is plenty of bad open source code out there).

    There's no substitute for practice though. Build things you need. If it is at all possible, get your code reviewed by someone more experienced (I will volunteer to review some stuff if you post it to github or somewhere like that, although make sure you aren't posting code from your work that your employer owns).

    One final point - I try not to be prejudiced against languages since really what makes a software engineer good is the ability to solve the problem in a maintainable way and you can do that in most languages, but you should know that VBA has a certain reputation since most people who use it were just scripting some extra stuff for their excel file.
u/durpyDash · 2 pointsr/MLPLounge
u/zoredache · 2 pointsr/sysadmin

[The Pragmatic Programmer: From Journeyman to Master](]

It is obviously aimed more at programmers, but if you keep an open mind you will find a large number of lessons that applies to system administration.

u/Illumi_Naughty · 2 pointsr/learnprogramming

My advice. Read this book Pragmatic Programmer

Changed the way i view programming. It is tough to work on a project (especially in a group). This book, written in the 90's, speaks so much truth even in our world today.

u/BugWare · 2 pointsr/csharp

Exactly the books many people suggested !
Further they recommended me this

u/CloudConfidant · 2 pointsr/iosdev

Hi Sherlocked_
Congratulations on already having an application in the app store. That is a huge accomplishment. Also the fact that you have realized your code wasn't perfectly designed is a really good sign.
My advice for you is to just keep writing those applications. Every single one you write will become a little bit better.

This will happen to you:
Either a bug will come up in your system or you will want to implement a new feature.
When you attempt to fix bug or add feature, everything will break, or you will notice that you are making tons of updates when it should have just been in one place. Each time you do this, you will learn and the next time you are developing a piece of code that follows a similar design pattern, you will know just what to do.

At the end of the day, experience is primarily all that separates the good developers from the bad.

One of my favorite books is The Pragmatic Programmer.

Hope that helped!

u/nutrecht · 2 pointsr/learnprogramming

SOLID, DI etc isnt' architecture, it's design. For architecture I can recommend this book.

When it comes to designing software well I can recommend Clean Code and The Pragmatic Programmer.

Also if you have specific questions ask them here. But be specific; I'm not going to write a book for you ;)

u/BruceJillis · 2 pointsr/javascript

The Pragmatic Programmer. Here is a quick ref that gives a good overview of the contents.

u/ChemistInDisguise · 2 pointsr/learnprogramming

I think I get what you're saying, and I was in a spot like this for a while myself, although for me it was more about trying to figure out "how do I debug my code?" - everything's focused on the language itself, and not so much on the peripheral skills. I eventually found resources that helped and I started making progress, so let me pass on some advice.

First up, if you're getting stuck with your IDE, trying getting rid of it for a while. Instead, just use a text editor and invoke your compiler and run your programs through the command line. This will force you to figure out what you don't understand about the build process, and once you do begin to understand it and grow beyond it, you'll be able to go back to your IDE and more easily figure out how to do all the new stuff you just learned in there. The other benefit is that after a few rounds of compiling godawful novels of commands to include and link everything in a decently complex project, you'll be desperate for a better way and have a motivation to learn about Makefiles (or automated build systems in general) which you mentioned not really understanding, but by this point you'll be intimately familiar with why they were created. To learn about them, Google is really your friend - there are a ton of tutorials online and some of them are decent, along with plenty of templates and such to get you started.

But that's only part of your question, I know. For the more general stuff, I have two major suggestions. For general 'peripheral' coding knowledge, I'd actually recommend Effective Computation in Physics. It's aimed at academic researchers and focuses on Python, but those things don't really matter; the best parts of it are the ones that aren't language-specific or domain-specific at all. Because it's written for people who may be trained as physicists (or biologists, or chemists) first, it works up from ground zero and actually explains things like unit testing, debugging, project organization, version control, and everything you need to have a self-sustaining small-to-mid-sized project, which is what it sounds like you're struggling with right now. My other suggestion is that if you're confronting more abstract issues, like design, you could check out The Pragmatic Programmer, which has a lot of good suggestions for avoiding bugs and increasing reusability and ease of maintenance. It's also targeted at small-to-mid-sized projects, but I find most design books for industry-scale stuff to be almost impossible to get through if you're not actively working on a large design team for a real-world application (though if you need that level of sophistication, there are some options if you poke around Amazon).

Apart from those things, you might also consider directly searching for some of your questions, like "how do I organize a software project directory" - I've found surprisingly helpful mini-tutorials from random university CS sites that way, usually as part of the intro or syllabus for a programming class. Oh, and if you're having trouble even getting started on what you want to do, see if you can't break it down further - make a toy engine that does one thing, then add one more thing, then add something that ties those pieces together, etc...

Anyway, hope something in here helps you, and good luck!

u/mehoron · 2 pointsr/Unity3D

Buy The Pragmatic Programmer, read it from cover to cover. Let it change your life. It's not a specific language reference but it's pretty much required reading for any new programmer. It's about creating maintainable code, which is more of a mindset than anything, it's also a really really EASY and relatively entertaining read.,204,203,200_QL40_&dpSrc=srch

Another more specific book to use as reference is the Effective C#:,204,203,200_QL40_&dpSrc=srch

They make "Effective" books for nearly all popular languages, and they really are great references. If you don't understand everything in it like co-variance and contravariance google as a lot of good examples of these concepts in practice, as well as definitions. Believe me I understand that these things can get really confusing and frustrating coming from a non-academic background and trying to bridge that gap. But utilizing this book and understanding the lingo will also help you to find more answers to run on your own.

Now, as with anything in programming, the point is not to have to remember everything all the time in these books(despite what try-hard programmers on the internet will tell you). That comes with experience and you're human so don't set yourself up with that expectation. Read them once so you know what is in them, and keep them at your desk for reference.

When you need to construct an interface pull out the book go to the interfaces and give it a glance over to give you an idea on where to go.

u/ryanplant-au · 2 pointsr/learnprogramming
u/electricbananapeel · 2 pointsr/salesforce

What are your 3-5 year goals? You don't have any code experience, do you want to gain some broad computer science/ programming chops or are you after SF specifically? What happens if SF falls out of favor, what do you want to be your secondary employable IT skill? Things to think about as your starting your journey into programming.

Regardless of your goals, I would encourage you to learn some additional languages/ paradigms than SF. I can't stop suggesting cs50, it's a world class intro to computer science.

Without filling in some more of your broad coding chops and learning best practices it will become at increasingly difficult at some point to continue to 'level up'. Understanding the design patterns/ strengths and weaknesses of other platforms will give you additional insight into what's good and bad in SF, what to lean on and what to mitigate.

What are your motivations for going into dev? Is it the work? The pay? The different role on the team? Job prospects?

What worked for me:

More than anything else, I wrote a lot of code. I wrote code to solve small problems, I wrote code for production. I volunteered with a local nonprofit. In all I tried to get in 1 hour of practice going from requirement to completed solution (with tests!) each day, with the keyboard in front of me. Preferably that 1 hour was spent on something that I would get to a MVP and would actually be used even if it was only ever by me.

Things I would suggest:

  • CS50
  • Code newbie podcast
  • Thoughts I wish I had run into when I was starting Also I think being the only one who cares about best practices is often a SF devs job.
  • Pragmatic programmer Useful after finishing cs50 but probably a little dense up unitl then.

    My goal has been to fill in a solid base of CS underneath me, that will be helpful with SF and many other platforms down the road.
u/maksa · 2 pointsr/serbia

To je čest anti-pattern, dovedu se fazani da održavaju stare projekte da bi stare iskusne kuke Pravile Novo. Keč je što su fazani po prirodi stvari nespremni za tako nešto. Zasuti nekoga ko je do tad radio samo na sintetičkim fakultetskim projektima gomilom real life legacyja je ... upitna praksa, ali nije ni skroz glupa pošto je to bitan deo realnog programerskog života. Kako kaže onaj kliše: "prvih 10 napisanih linija su greenfield projekat, sve preko je legacy kod". Sve što te ne ubije te jača. (F. Niče)

Ako nemaš živog mentora, ili ti je mentor go qrac, ovo je verovatno sledeći najbrži put do sledećeg nivoa:

Knjiga jeste malo outdated po pitanju tehnologija, ali su principi i saveti odande svevremeni, dobri, i večiti.

u/erisson · 2 pointsr/compsci

I would suggest reading these books:

u/WikipediaHasAnswers · 2 pointsr/learnprogramming

The Pragmatic Programmer is in my opinion the best book on "etiquette". My first boss in the games industry bought it for me and told me to read and absorb it.

Large Scale Software Design was the book I read about large scale structure, but I think it's kind of out dated if you ask me.

u/donquez · 2 pointsr/learnprogramming

In terms of practical, professional skills, here are a few I would recommend:

  • The Pragmatic Programmer - writing non-trivial applications requires discipline and a practical mindset. This book is frequently recommended to new programmers as exposure to how think about and approach software development.
  • Head First Design Patterns - schooling introduces you to OOP, but design patterns really highlight the strengths of object orientation. The Gang of Four book is also recommended, but I feel like the Head First book is more approachable.
  • Working Effectively With Legacy Code - You didn't mention if you're coding professionally, but I think the above two books are applicable to someone who wants to take their work to the next level. If you are looking to work in software development, you're going to encounter a lot of legacy code - code that is poorly designed or hasn't evolved well with the application. This book gives you methods for recognizing and untangling the mess.

    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.
u/s1lv3rbug · 2 pointsr/learnprogramming

You are on the right track. The most important to understand is the fundamentals of any programming language. You mentioned Java. Java is an object-oriented programming language. In order to write good code in Java, you will need to learn what is an object? What is object-oriented? Like, what is inheritance, polymorphism, classes, interfaces etc etc. Once you learn the concept of OOP and you want to learn Python (another OOP language), it will be that much faster, because you already understand the concepts. Python has its nuances but you learn as you go along. I think you should start with the Head First series by Oreilly. They are sooo good at teaching this sort of stuff. I will give u the links below:

Head First Java

Head First Object-oriented Analysis and Design

Head First Design Patterns

Buy just the one book and start from there. Checkout the Head First series, you may like other books too. Also, google 'design patterns' and read about it. Some people mention Algorithms and that is all great stuff and you will learn as you write good code. There is another book I would recommend:

Pragmatic Programmer

I would also suggest that you should try different types of programming languages as well. Like functional (LISP or Scheme) or procedural (C). When you do that you will start to think differently and it will expand your knowledge. LISP was created in 1958 by John McCarthy. My friend works at Google and he told me that they are using LISP behind Google Maps.

u/murfflemethis · 2 pointsr/AskProgramming

The Pragmatic Programmer.

By far, this is the best programming book I have ever read. It discusses programming and software design strategies that are completely language independent, and were rarely discussed in any of my classes.

I wish whoever wrote the legacy code I currently work with had read this book.

u/valbaca · 2 pointsr/cscareerquestions

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 :)

u/ivansonofcoul · 2 pointsr/learnprogramming


Pragmatic Programmer

C language

This one is a lot tougher read and is probably one of the most famous book sets in Computer Science
Computer Programming Don Knuth

Edit: fixed spacings

u/ominous · 2 pointsr/programming

A Discipline of Programming. Classic but expensive. Read the first few chapters at your library before buying.

Polya's How to Solve It!

The Mythical Man-Month

Finally, The Pragmatic Programmer.

u/minond · 2 pointsr/webdev

Not really related to mobile development, but he should still really enjoy these if he hasn't read them already:

u/SoBoredAtWork · 2 pointsr/learnprogramming

Are you asking the PriceZombie? You'll probably have to link to it...

> What about The Pragmatic Programmer?

u/desrtfx · 2 pointsr/learnprogramming

> What is a book that you would consider to be mandatory reading to get the foundation of thinking like a programmer?

The very book named "Think Like a Programmer" by V. Anton Spraul, on No Starch Press.

Currently on the Learn You Some Code by No Starch Press Humble Bundle (which I can highly recommend as a whole - up to the top tier).

Also: Pragmatic Programmer

u/ReverseEngineered · 2 pointsr/learnprogramming

Programming is a tool. I suggest finding another interest that you can apply it to. Robots, graphics, music, animation, sports, economics -- the possibilities are endless. Pick your favorite area, look at what kind of problems there are in that area that people use programs to solve, figure out how those sorts of programs work, and try to solve some of those problems yourself.

A few interesting examples:

  • Project Euler has a set of challenges relating to both math and computer science that will stretch you to learn more about both.
  • Python Challenge is basically a series of puzzles that challenge you to do new and interesting things with Python. Granted, several of the puzzles are quite similar and some of the libraries they reference are deprecated, but it's a place to start for programming challenges.
  • Programming Computer Vision With Python talks all about using programs to do things like find objects in pictures and track them even at different sizes and angles. Lots of great examples.
  • Programming Collective Intelligence talks about putting together data from different sources (primarily websites) and finding patterns. It deals with many machine learning concepts in ways that are practical and interesting. Things like modelling and predicting, optimizing, clustering (finding similarities), searching and ranking, and pattern recognition.
  • Arduino Robotics describes many robots you can build with relatively common parts that can be programmed using the inexpensive, C-based Arduino microcontroller platform. I've made several of these myself.
  • Digital Signal Processing is all about writing software that takes advantage of advanced math to manipulate signals in many ways. It's invaluable for audio, but you see it used with graphics, digital communications, and many other areas.
  • There is a subset of sports fans that really enjoy statistics and software can be very valuable for them. Things like comparing players across eras, predicting future performance, and helping to find high-value players. The general field is called Sabremetrics. I looked deep into it in relation to major league baseball. Two books that I found valuable are The Book: Playing the Percentages in Baseball and Baseball Between the Numbers.
  • Programmable games are cool too. Things like CROBOTS, CoreWar, RoboWar, and Robot Game. It's just as fun building the simulation environment as it is building the bots that compete within them.
  • Pick up any book on algorithms. Learn to apply the basics like binary search, insertion sort, radix sort, memoization and linear programming, Dijkstra's algorithm, and Newton's method for root finding.
  • Grab another book on data structures. Make sure you understand the differences between arrays, linked lists, hash tables, and trees. Learn about unique and useful things like binary trees, radix trees, heaps, and queues.
  • Learn how to write better code. I recommend books like Code Complete and The Pragmatic Programmer.

    Whatever you do, as you clearly pointed out, you have to be interested in it or you'll grow bored and give up. Find something that is interesting to you and pursue it as wide and deep as you can.
u/kirang89 · 2 pointsr/AskComputerScience
u/melancholiclabs · 2 pointsr/Drugs

Read a lot of books. Everything is usually available as a pdf on the internet and the ones that aren't are $10 to rent on Amazon. Here's the ones that I've read that relate to this project.


u/HaltenIhm · 2 pointsr/FreeCodeCamp

Programming folks are SUPER opinionated. I think knowledge is knowledge, how you get to the source(or sauce) is irrelevant. Such as some folks love Stack Overflow, some hate it.

w3schools is a good entry point into some of the concepts, they do examples that make sense to me-- so I use them. I also use books, other websites, blogs, podcasts, and other programmers. Just find something that works for you. Find the tasty sauce :D

One thing you'll realize is how much people who seem to know things don't actually know as much as they think. There is this book pragmatic programmer that examines the idea of being less opinionated since tech constantly evolves. It's kind of like this, when you start learning things it kind of crystalizes how you think about programming. Kind of like on average folks like music from their high school years the best since that's when they were into music the most. Much like music, there will be better artists, there will be better songs, or even better compilers, higher concept languages, and there will be better frameworks. Whatever helps you drink from the fount, use that.

I hope that wasn't too self-congratulatory and here are some links to a podcast I listen to, a youtube channel, and that book I mentioned:

u/TerryMcginniss · 2 pointsr/goodprogramming

Big fan of The Pragmatic Programmer: From Journeyman to Master, haven't read Clean Code yet though.

u/AlSweigart · 2 pointsr/learnpython



> From experience, one book is barely enough to get your feet wet

Ha! Definitely. I keep getting ideas for other books I should write.

I'd recommend the following as good general books to read. They're all good no matter what type of programming you do:

u/a_small_goat · 2 pointsr/csharp

You're not going to want to read things that make you wish you had a computer with you, trust me. You have no idea how many times I have tried to force myself to read stuff like that when traveling or on vacation. Never works. So here's some stuff geared more towards the philosophy of development and programming that will be fun to read and will probably make you want to slow down, relax, and think about the concepts.

u/guifroes · 2 pointsr/cscareerquestions

Hahaha, you're right, my post sounds totally creepy, sorry about that.

What I got from you is that you're basically dealing with 2 issues:

Lack of knowledge, skills and experience: it's like you have 4 times 1 year experience instead of 4 years of experience. Seems that you miss being exposed to different challenges and solutions to those challenges.

Imposter syndrome - fed by the previous one

First, it's important to acknowledge that both these problems will follow you throughout your whole career. The very nature of our industry, whit new tools, languages, frameworks and techniques appearing litterally everyday, makes it impossible for someone to know everything. Given this scenario, we have to be smart about what and how to learn things and, at the same time, be confortable being unconfortable.

I think those are a whole new discussion (we can talk about it if you want) but I'd like to suggest some tactics that might help you on a shorter term:

Join a community

This was what made THE big difference for me years ago. I didn't know anything other than what I did at my job; the community showed me different ways of doing my work that I didn't know even existed. It's a perfect space to learn, share experiences and network. Try to join a local community that has in person meetings. I still get a lot of energy from interacting with people from outside my job.

Pair programming

I don't know if your team does pair programming, but I'd recommend it. Even if you team doesn't do it, ask people if could pair with them for an hour or so on their tasks. Learn their style, how they use their tools, their shortcuts. Ask what they're thinking as they code. Discuss the solution being implemented, talk about alternatives.

I think pairing is one the best ways to learn.

Good article about techniques for pair programming by colleagues of mine

Start a pet project

Assuming you lack experience on backend development, I'd suggest you start building a complete web application on your free time. Build something that you care about and would actually do something, so you stay motivated. You can start with something very simple and add features as you go.

I don't know if you're interested in some specific language/technology and I don't know what your team uses on your current job (it would be nice to practice on something that would be immediately useful on your job), so I'd recommend something like Rails. Rails can be simple enough for a beginner to see progress quickly and has a huge community for support.

This app can be your platform to learn and practice a complete software development lifecycle for a typical web app - stuff like OO design, HTTP and REST, MVC pattern, unit testing/TDD, integration and functional testing, version control and how to deploy and operate a system in production.

You can share your code in GitHub and ask for reviews and feedback.


There's always someone that knows less than you do about a subject. Offer help on the communities you're part of, answer questions on reddit or stackoverflow, coach a new teammate... there are tons of opportunities. Teaching will make you feel good about yourself and will help you to reflect and understand more deeply the subjects you're teaching. Confidence + knowledge.

Host a lunch & learn or brown bag session for your team/company. You could share interesting stuff you're working on, cool technologies for your team to try or any other tech related subject. This can make you be perceived as the "go to" person on some subject and as someone who's making an effort to learn and share with coworkers, bringing lots of value to the team/company.


I strongly recommend you check out Clean Code and The Pragmatic Programmer. There are many other great books I could recommend but those two were the ones that changed the way I see my profession.

I can think of a bunch other tactics to help you improve your skills and confidence, but I think this is enough to start a conversation.

Ideally, our jobs should provide all the opportunities to practice and accomplish all the things I suggested you do by yourself. But to get one of those jobs, we need to take the firsts steps. My point is that we should be in control of our career, not your manager/team/company. If we want to learn something, or use some tool or technology, we shouldn't wait for the opportunity to come.

Does this make sense to you? Is this helpful?

PS: I'm curious about a couple of points:

When you say "I've always struggled to build big features", what kind of features you're talking about? Can you be more specific?

When you say "I have to spend a really long time just thinking about some problem", what kind of problem is this?

I might have some insight about those issues.

u/readingwaters · 2 pointsr/learnjavascript

I started learning about two weeks ago and this is my path so far.

Codecademy: HTML/CSS, jQuery, Javascript, (and a few others, learning web dev)

Books: Eloquent Javascript, Pragmatic Programmer Training JS Series

Basically, I've gone through the Codecademy courses and they gave a good overview of things. I practice on Codewars and read the books when I am not in front of a computer or not doing anything else. Currently I am taking courses on Treehouse Wordpress track

u/flundstrom2 · 1 pointr/programming

The mythical man-month

The first version was published 40 years ago, but its content was reviewed and updated when the current version was written, 20 years ago. And you'll be surprised to realize that developers still keep doing the same mistakes as back then...

BTW: Also check out The pragmatic Programmer. Also focused on best practices gained from real-world experiences.

u/Jameson2011 · 1 pointr/evetech

I can't point to PHP libraries and what not, but here're some general words.

I'd start to learn with Python. It's newbie friendly, has a vast amount of libraries, and it scales with what you want to do. Back end servers, web sites, desktop apps. Even Eve. Although it's not the fastest language it's certainly one of the easiest languages to get into.

Depending on who you ask, you'll be told coding is either a hobby, a craft, an art, a science or just a job. I think it boils to attention to detail and avoiding procrastination. To help get into that mindset, I tend to recommend this:

Once you get onto the path, you'll be buying lots of books. Worse, hording them.

Once you've got the basics - got a couple of apps running successfully - I'd suggest you get a firmer, more "computer sciencey" bedding: if you're like me, "complex" is often a good thing. CS will help you make complex things run faster and in less development time.

And MIT just happen to use python and they publish some old lectures: If maths is not your strength here's a really simple rule: just keep an eye on ratios, such as "how much work can I achieve in 1 step?" and you'll have beaten many developers.

And that rolls into the final point: be sure you want to do this. Many have tried, and normally chilled people will rage in frustration. Like Eve, software needs commitment & time.

The very best of luck in your travels.

u/crowseldon · 1 pointr/learnprogramming

Practice, practice, practice. Theory is great but it needs to be accompanied by practice or nothing will really stick.

Doesn't matter if you feel lost or suck. Just as long as you keep trying and never get discouraged.

If you want one book that I'd recommend to get into the mindset read "The Pragmatic Programmer"

u/iemfi · 1 pointr/singapore

I see most things have been mentioned already. Project euler is good if you don't have a project in mind (and if you like math). The pragmatic programmer is also a great book to read after you have some beginner knowledge.

u/TonySu · 1 pointr/learnprogramming

I'm a Masters of Statistics student with quite a bit of interest in programming. I'm currently working through Discovering modern C++ which I find to be a nice concise text about modern features of C++. Many other C++ texts don't tend to make good use of modern C++ functionailities and end up with codes and styles that look like C more than C++.

In general I find people with Math/Stats write terrible code. So I really would recommend The Pragmatic Programmer and Clean Code for good programming practices (I prefer the latter to the former but both are good). Us maths students are too used to having abstractions in our head that we don't make clear in our code. We quickly synthesise complicated solutions to problems and code it up without making the logic transparent. Coding is a lot more fun when you don't need to sit around for a hour working out why the code you wrote a month ago works.

I'd recommend learning algorithms (texts already suggests elsewhere) using high level languages like R and Python. It's significantly easier to code up simple structures and algorithms without having to simultaneously grapple with a complicated language and its features. You are unlikely to ever code up your own efficient data structure or algorithm, the point is to understand the benefits of each and use someone elses implementation when you need to.

Finally always code with some form of static code analysis. For me this means using Sublime Text along with a SublimeLinter plug-in, there's a different linter for most languages. This will keep your code conforming with good standards and force you out of bad habits.

u/CodeBlueDev · 1 pointr/learnprogramming

Read books like The Pragmatic Programmer, Clean Code, and The Clean Coder. You can find pdf versions of these books if you know where to look.

Otherwise, start looking into design patterns and how to implement them, read other people's source code/open source and really try to understand it, read programmer blogs (like Jon Skeet's or something), and review the code you have written and think about what you could have done different or better. And of course you need to continue programming and practicing - you'll get the most out of this if you can integrate TDD (Test-Driven Design) into your applications.

u/kluvin · 1 pointr/cscareerquestionsEU

I finished in late December of last year. After that I took another spent a month taking Udacity's software testing which in reality was more of a QA testing for large software systems, the concepts taught was interesting, at least. After that I spent a few months using a Linux distro as my primary OS--primarily Arch, but some others as well--while at the same time reading up on and trying out various topics:

  • Testing
  • Test-driven development
  • Integration testing
  • Unit testing
  • Continuous integration
  • Various software metrics, including code coverage metrics
  • Trying to use git for more than push, pull, and commiting
  • Prototyping; and
  • I read The Pragmatic Programmer
  • I also messed around in Haskell, super fun, but I didn't retain a thing, I'm definitely going to get back at it when I ASAP

    As of now I have a few projects lined up, but no actual results sadly, I seek to change that.

    I once came across this, upon my realization of how little I really know, and how much there truly is, I kinda just want a whole lot more free-time. While there might not be a single decent intermediate course out there, believe me I looked quite a bit, there's no shortage of resources available, all for free!
u/chadcf · 1 pointr/web_design

If you're looking for more than tutorials or picking up a project as a learning experience, Code Complete by Steve McConnell and (though getting a bit dated) The Pragmatic Programmer are classics in improving your development skills. I'm also looking at Clean Code next, looks very useful for those of us in the trenches who often have to throw out some code with limited time and ever changing requirements.

Also if you're going to be digging into any rails stuff by chance, I can highly recommend Rails AntiPatterns as a great reference for more than the basics, as well as the Destroy All Software podcasts (which cover more advanced topics than most podcasts).

u/Mr_eX · 1 pointr/RPI

I learned more from this book than I did from all of SDD, which was certainly my least-favorite course in all of CS. I strongly suggest emailing the UCC as somebody else suggested. I did the same in May, and I will reproduce that email here with names removed. I was thanked via email by 2 professors, so clearly they didn't mind that my email was entirely negative.

Dear [department head],

I am writing to you because of the problems I had as a student in Software Design and Documentation (SDD) this past semester. I wish to convey to you a comprehensive list of my concerns and, where appropriate, any action I think should be taken to resolve these concerns. I understand that revamping the curriculum of SDD has come up in the last couple of UCC meetings, so I hope my input will be valuable toward that end.

My foremost concern is that the SDD instructors and TAs did not respond to out-of-class communications reliably. Throughout the semester, it took the SDD instructors and TAs about half a week to respond to my emails, and a couple of messages were never responded to. In particular, I requested to meet with any one of the instructors or TAs to review my final exam term paper. [instructor 1] said in-class that such requests would be fulfilled by [instructor 2], but my request was never answered (the assignment was due on 5/17.) We were not allowed to discuss our term papers with other current SDD students, so I ultimately had to submit my paper despite being uncertain about several technical aspects of the material discussed in the paper. As a student, it is unacceptable to me that a request for help could go ignored, especially after said help was promised in-class.

Next, [instructor 2] was tardy or absent throughout the semester--she was 60-90 minutes late to most of the classes she attended (note that SDD is a once-weekly, four-hour class) and often she did not show up at all. I do not recall a single instance of [instructor 2] being in attendance at the start of class. Furthermore, [instructor 1]'s absence caused one or two classes to be canceled--as if he was the sole instructor of the course. Another class was delayed by nearly two hours because of both instructors' tardiness. These cancellations and delays had a dramatic impact on the class' due dates, pushing two major submissions within one week of each other at the end of the semester. I feel that all of these problems are unprofessional and a mismanagement of the students' already busy schedules. I understand that [instructor 2] has a background as a software project manager and we are fortunate to have her teaching the course, but due to her limited classroom presence I did not feel the benefit of her industry experience.

Finally, I wish to discuss the curriculum and general perception of SDD. As far as I know, SDD is universally loathed by students and having taken it myself I now understand why. In my view, the course did not successfully convey why the course material is important, making the four-hour class period very difficult to sit through even with breaks. Similarly, a lot of the non-programming work that we had to do for the long-term software development project felt like make-work rather than a legitimate contribution to the group effort. What's more, one of [instructor 1]'s presentations made comments that marginalize the difficulty of programming by calling it "monkey work" and "a purely mechanical process." I found these comments insulting because they apparently devalue the knowledge and skills I have learned during my time at RPI. [instructor 1] said that SDD is "not a coding class," but I think that is an absurd statement because the class has a high degree of programming homework in the form of the semester-long project. Ultimately, I have finished SDD having gained not much more than the idea that "waterfall development is bad" and vague knowledge of iterative software development and design patterns.

Because of these problems, I believe the biggest thing that SDD is missing is material on how to write good code from a software development standpoint, i.e. ease of maintainability, eliminating duplication and coupling, legacy support, shipping good updates to users, et cetera. At my summer internship last year, the interns all had to read the book The Pragmatic Programmer ( and in just two hours of discussing this book I feel that I learned much more about software development than I did all semester in SDD. The only advice we got about writing code in SDD was to write lots of comments, which is not necessarily a good practice.

Thank you for reading, and if you have any questions I would be more than happy to answer them.


u/miarsk · 1 pointr/learnprogramming

I really like this one:

Friend who bought it for me said it is a must read for a programmer, so it is probably well known book for developers. But I am reading it only now and since you are looking for "general stuff" I strongly recomend it.

u/ServerSimulator · 1 pointr/Unity3D

>mostly because you need to be good at a lot of mathemtics, is this true?

This is primarily for algorithms. It's pretty easy to be good at math, the hardest part I find for people who program is that they often don't think "outside the box" in breaking their program down.

I and others recommend programming in C#. You should be able to get off the ground with the following resources:

This list is for programming in general:

u/spacemanatee · 1 pointr/gamedev

Tracer Bullet is a section from The Pragmatic Programmer and one of my favorite parts of the book.

u/Durshka · 1 pointr/learnprogramming

Ah, thanks :) Sorry I can't be more help! Maybe go looking for some books? A friend of mine lent me some books to get me started but they were too far above the basics for me to dig into. You might have better luck checking out Amazon or going to a bookstore and flicking through any of the C# books there to see if they'd interest you. The ones she gave me were: The Pragmatic Programmer, C# for Java Developers and CLR via C#, she gave me the 2nd edition, but the 3rd one is available. All I know about them at the moment is that they're further along than I am :)

u/MaximusBiggusDickus · 1 pointr/learnprogramming

Great. Lol when people arguing and become not so dependable in the project, that's what exactly simulate real-life project. Adding more people on your project will only add more problem ;). Read some insight about the world of computer scientist/programmer:

u/coelhudo · 1 pointr/todayilearned

There is a sub chapter on Pragmatic Programmer book about this.

u/mnemosyne-0002 · 1 pointr/KotakuInAction

Archives for the links in comments:

u/Arclite83 · 1 pointr/cscareerquestions

This list is truly excellent, these are all on my shelf and highly recommended. I credit much of my success to these books.

The only big one missing for me is Pragmatic Programmer. (Yes I know it's listed further down a few times)

u/DDB- · 1 pointr/EngineeringStudents

I can't help with MATLAB much, but with Java I'd recommend a couple things.

For books, The Java Programming Language, from the creators of Java is an excellent resource. Another book that is not specifically Java related that I recommend is The Pragmatic Programmer: From Journeyman to Master, as it is a great book on programming practices and good things to know. I've read or looked at a bunch of the books by the Pragmatic guys and they are all really good if you ever get into other languages as well.

In general though for all programming, the most practical way to learn is to start with simple problems that interest you, or maybe ones from sites like Project Euler and just learn by doing. There are lots of great tutorials online, and if you ever get stuck, Google and Stack Overflow are your friends.

u/jephthai · 1 pointr/arduino

> Auto generated code
> shuddders

Ever read The Pragmatic Programmer? Code generation is an elite skill, not a bad one.

u/JShenefield · 1 pointr/muchinteresting

One of the best books I've read thus far has been The Pragmatic Programmer. This book has a plethura of tips to help you become a better developer and lots of examples to help you see the benefit behind each tip. It is definitely worth a read, so if you haven't read it, I highly recommend you do!

I have a copy if anyone would like to borrow it.

EDIT: Updated to include link.

u/CSMastermind · 1 pointr/compsci

sigh This sub lacks good advice sometimes.

All right, I'm going to give you a real answer.

Go get yourself a copy of Cracking the Coding Interview. It's the best resource for tech resumes / interviews. Additionally you might want to look at The Google Resume by the same author.

Let's start at the beginning:

Get a Resume.

Here's my slideshow from the last time I gave a presentation about it. Here's a template to start from.

Now's a good time to stop and mention something. I can't tell you the number of times someone has come up to me and said, "<CSMastermind>, I have an interview with <big name company> tomorrow, how should I prepare?" I have to tell them, "Nothing you do in the next 48 hours will dramatically affect the outcome of your interview." It's just not how the process works.

Start Doing Things You Can Put on a Resume.

Right now. Go read this article. Then go watch this video.

Now that you're in the right mindset, do you have a Github profile? No? Get one tonight. You need to learn to use source control, you probably won't be taught it in school, and it will make you a better developer. Start by uploading the projects you've done for school. Once you have them uploaded, go back and clean up the code. Now that anyone can look at it make sure it's something you're proud of.

Likewise go sign up for a StackOverflow account. You'll need it in the future.

Go to Khan Academy's coding section, Code Academy and Udacity. Start learning outside of the classroom.

Ever been to a hackathon? No? Find the one that's nearest to you here. Go to it. Make something. It doesn't have to be good, it just has to be something.

Start reading some books about software development. Code Complete, The Pragmatic Programmer, and Don't Make Me Think are the ones I normally recommend starting with.

Watch the first video in this series. It gives a good overview of the history of programming languages.

Read through the archives of Joel on Software. Then get off of Reddit, the talented programmers are all on Hacker News.

Finally start doing personal projects. Use technology until you find something that you wish existed, an idea for an app, a game, or a browser extension. Make it. It will be hard, you might fail. Focus on making something, then work on improving.

Good now you have things to put on your resume.

Applying to Jobs

Okay, I don't know where you go to school. If you're at a top ~25 school the recruiters will be coming to you, ask around. If you're at a smaller school start by applying online, consider looking for career fairs in the area and travel to them. Remember that hackathon you were going to go to? It's full of recruiters. Are you a minority? There are conferences if you're a woman, black, hispanic, or native american. Those conferences are also full of recruiters. Does your school have a computer science club? If so they probably maintain a "resume book" that they pass out to employers.

So say you're at a hackathon / conference / job fair and you're about to talk to a recruiter. Before you go practice your "elevator pitch". This is the first thing 10 seconds or so where you introduce yourself to a recruiter. Something like:

"Hi, I'm <name>. I'm a sophomore in computer science major, and I'm really excited about applying game development to learning. I've actually developed an interactive educational program to teach children how to draw. Do you think you have an opening for someone like me?"

Hand them your resume, be prepared to answer some basic technical questions. Finally are you a woman? Congrats, you get a free job at almost any company you want. Go apply to Microsoft's explorer program and others like it.

Got an interview? Great.

Handling the interview

Remember when you got Cracking the Coding Interview? That's now your bible. Get some friends, got into a study room with a whiteboard and start to practice. Make sure you can answer any of the questions in the book in the language of your choice. Here's my slides from the last presentation I did about technical interviewing.


My background: internships at Microsoft, Facebook, and Google, Microsoft "intern ambassador" twice, Microsoft "student partner", Google "student rep", president of the ACM on campus. Now I work at a large financial company in NYC and help run our recruiting program.

If you need help with any of this stuff PM me.

u/jmonty42 · 1 pointr/cscareerquestions

You could suggest the other guy read the Pragmatic Programmer. It has good arguments for things like code reuse and the value of refactoring in it.

u/bautin · 1 pointr/cscareerquestions

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?

u/reddilada · 1 pointr/learnprogramming

> it's hard to change things later

Can you identify why it's hard to change? Stop doing those things. Reflecting on what is the root cause of a problem is essential to improving one's self. When you have trouble always look back and ask yourself, how could I have avoided this problem in the first place?

There are a lot of practices that can help. Be organized. Be consistent.

A nice old list of guidelines to follow
Writing Solid Code
The Practice of Programming
The Pragmatic Programmer
Clean Code

u/Bonejob · 1 pointr/compsci

Get yourself a copy of the Pragmatic programmer. This will help you with fundamentals that all professionals should know but few do. Not all of it is programming. "Each tip is drawn from experience, told as concrete advice, and related to others to form a system"

u/Iconate · 1 pointr/PHP

These two books were the best programming books I have ever read:

u/jacobisaman · 1 pointr/ISTJ

If you finish up the other books, you could read Design Patterns and The Pragmatic Programmer. There will be some overlap with the first two books I mentioned, but I think it can be helpful to read about the same topics from different points of view. I would probably read Clean Code and The Pragmatic Programmer straight through. The other two can be used more like reference books. Although, be sure to practice the design patterns you learn from the reference books.

There are programming exercises that you can use to practice patterns. Look up coding katas and see what you can find. Start with Gilded Rose. There are multiple ways to refactor this code, so it's a good one to practice. Here's another one.

u/autisticpig · 1 pointr/Python

If you were serious about wanting some deep as-you-go knowledge of software development but from a Pythonic point of view, you cannot go wrong with following a setup such as this:

  • learning python by mark lutz
  • programming python by mark lutz
  • fluent python by luciano ramalho

    Mark Lutz writes books about how and why Python does what it does. He goes into amazing detail about the nuts and bolts all while teaching you how to leverage all of this. It is not light reading and most of the complaints you will find about his books are valid if what you are after is not an intimate understanding of the language.

    Fluent Python is just a great read and will teach you some wonderful things. It is also a great follow-up once you have finally made it through Lutz's attempt at out-doing Ayn Rand :P

    My recommendation is to find some mini projecting sites that focus on what you are reading about in the books above.

  • coding bat is a great place to work out the basics and play with small problems that increase in difficulty
  • code eval is setup in challenges starting with the classic fizzbuzz.
  • codewars single problems to solve that start basic and increase in difficulty. there is a fun community here and you have to pass a simple series of questions to sign up (knowledge baseline)
  • new coder walkthroughs on building some fun stuff that has a very gentle and friendly learning curve. some real-world projects are tackled.

    Of course this does not answer your question about generic books. But you are in /r/Python and I figured I would offer up a very rough but very rewarding learning approach if Python is something you enjoy working with.

    Here are three more worth adding to your ever-increasing library :)

  • the pragmatic programmer
  • design patterns
  • clean code

u/abdulapopoola · 1 pointr/javascript

Also pragmatic programmer - distilled experience over time.

u/SoftRare_eu · 1 pointr/Unity3D

In that case I can recommend "The Pragmatic Programmer"

u/cube-drone · 1 pointr/programming


  • What was your major in college?: Computing science.
  • What was your career/vocational journey like once you graduated from college?: Turbulent.
  • How did you prepare for entry into your profession?: Co-ops, reading dozens of articles and books about how to be a programmer.
  • How did you locate & secure your current job? : Twitter, surprisingly.
  • What specific degrees or experience is necessary for this kind of work? : "Be a good and unusual programmer." CS degrees are always helpful but not necessarily requisite.
  • If you were to redesign your college experience what would you do differently? : One time I took Software Engineering II instead of Algorithms II, and I still regret it. Universities don't do practical stuff well.


  • What is a typical work day like for you? Tasks throughout the day?: Shower, commute, standup, lunch, coffee, programming, commute, take-out, draw comics, watch TV with girlfriend.
  • Do you have opportunities for varied schedule, such as telecommuting; flex time, or job sharing? : Yes.
  • What are the most interesting or challenging aspects of your job?: I learn new things all of the time, because I've never worked in a job where I have to maintain cloud infrastructure or work with mobile devices.
  • What are some of the difficulties and frustrations of your work?: Maintaining cloud infrastructure, working with mobile devices.
  • What are the most significant changes facing your field/organization?: We're getting bigger, fast, and we're not sure how to attract good talent, filter out bad talent, and keep things from becoming a bureaucratic nightmare.


  • What experiences would you recommend I have (coursework, internship, volunteer, campus involvement, etc.) to prepare for a job in this field? : I could answer this ALL DAY. Get a CS degree, it's good for you. Don't do unpaid internships, it's bad for everybody. Try to get a commit into an open-source product that you think is cool.
  • What does it take (personality traits, strengths, and competencies, experiences) to be successful in this field?: If you're in any way different from the herd of young white males, you need an incredibly thick skin and a lot of personal resolve, and you're going to deal with a metric tonne of stupid entitled bullshit from people who have really only ever learned computers and little to nothing else. If you're young and white and male, uh... you're pretty much set, but try to be kind to others.
  • What do I need to have on my resume to be considered for employment in this field?: Programming languages. No food stains.
  • Can you recommend resources that offer helpful information about the field? : CodingHorror, Joel on Software,
  • What are some related occupations that I might investigate? : Tech Writer, DevOps/Sysadmin, Data Analyst,
  • What professional organizations would you recommend? Publications to read? The ACM releases some surprisingly good magazines. I like Linux Voice quite a bit, too.
  • What specific advice would you give a person entering the field? Be kind to others. Don't believe in the meritocracy. Socialize with your peers. Join the student society.
  • Can you provide me the names of two or three other people in this field who might talk with me and provide additional information? May I use your name? : No.
  • Would you be willing to review my resume if I emailed it to you? : Probably not?
u/cliveholloway · 1 pointr/IWantToLearn

Took me about 10 years to get to the stage where I felt that I was reasonably OK, but even now I hit new concepts, languages, processes that make me realize just how little I know.

I would skim books that can help with your approach - The Pragmatic Programmer and learn a bit about Design Patterns.

When I started programming Perl 18 years ago (holy shit that's a long time ago), I reasoned like this:

  • people who've been doing this for a while appear to know what they are doing
  • if I do this for a while I'll know what I'm doing

    The one thing I was missing was a local mentor. If you can find more experienced programmers locally (say, through meetup) and work out some mentors, you'll progress a lot faster.

    Good luck - it's an interesting journey if you decide to stay the course.
u/SpoobyPls · 1 pointr/learnprogramming

There are a few books I recommend. I think a couple of things are very important to wrap your head around, but before all that comes the basics. For instance, knowing your primitive types, methods, loops, and even OOP which would include things like; classes, structs, inheritance, polymorphism, etc,.

Then move onto some very good readings;

  1. Clean Code - This book is going to go through a lot of concepts and keeping your code maintainable and is a very short read.
  2. The Pragmatic Programmer - This one will go through, what I believe, you're looking for. Helps you get into the mindset of a 'pragmatic programmer.'
  3. Introduction to Algorithms - This I wouldn't start until you're fairly comfortable with programming in the language you are familiar with. By this point you should definitely have the basics down. In fact, I might argue do this one after you've read the other two.
  4. Lastly, I'd recommend doing Project Euler which is really going to put your skills to the test. It is very mathematical but if you're up for the challenge this will push you far.
u/austincrft · 1 pointr/MechanicalKeyboards

That's probably a good way to organize it then.

Here are a few good books to check out, if you care:

u/sotopheavy · 1 pointr/webdev

I have the first of these and plan to get the second two soon as they have come highly recommended by /r/programming at one time or another.

u/spaghetti_slinger · 1 pointr/cscareerquestions


The Pragmatic Programmer ($30)

Clean Code ($40)

Structure and Interpretation of Computer Programs ($40)

T Shirts ($20-30):

Works on my machine

Hello world


A nice coffee mug or teapot for the office

Nerdy desk top calendar

u/Elynole · 1 pointr/nfl

I'll throw out some of my favorite books from my book shelf when it comes to Computer Science, User Experience, and Mathematics - all will be essential as you begin your journey into app development:

Universal Principles of Design

Dieter Rams: As Little Design as Possible

Rework by 37signals

Clean Code

The Art of Programming

The Mythical Man-Month

The Pragmatic Programmer

Design Patterns - "Gang of Four"

Programming Language Pragmatics

Compilers - "The Dragon Book"

The Language of Mathematics

A Mathematician's Lament

The Joy of x

Mathematics: Its Content, Methods, and Meaning

Introduction to Algorithms (MIT)

If time isn't a factor, and you're not needing to steamroll into this to make money, then I'd highly encourage you to start by using a lower-level programming language like C first - or, start from the database side of things and begin learning SQL and playing around with database development.

I feel like truly understanding data structures from the lowest level is one of the most important things you can do as a budding developer.

u/MissMaster · 1 pointr/learnprogramming

I would focus more on deciding what you want to make. When you can make something that works, you're a programmer. When your code isn't brittle, is well commented/documented, is "clean" and other devs can understand and work with it, you're a good programmer.

So pick something you want to create and make it: a website, a simple program, a game, etc.

How to go about it? Once you have that thing you want to make, break it down into bite size tasks and start tackling them one at a time. First, you'll need to figure out what language and libraries you need (or want) to use. Then set up your dev environment and get a "Hello World" example to work. Then just start building piece by piece. Once it works, make it work better (i.e. refactor it).

I use a bunch of resources to be a better programmer:

  • dev blogs (a google search for "best <insert your field here> blogs" should give you some good ones

  • books for the basics. I can particularly recommend Code Complete 2, The Pragmatic Programmer, Head First Design Patterns, Design Patterns: Elements of Reusable OO Software and Algorithms in a Nutshell

  • Tutorials. I love a good tutorial. The trick is to find one written by a professional (usually on a blog you trust or from a tutorials site that vets the content, like tutsplus). Unfortunately, any asshat can throw up shitty code and call it a tutorial, so be careful googling and look at the comments first to look for people calling out issues. As you get more experience, you'll be able to spot 'code smell'.

  • pair programming. I hate pair programming. I instantly lose my ability to type or form coherent thoughts when someone is lurking over my shoulder. I am constantly terrified that someone will think I'm stupid. But it works.

  • fellow devs. Nothing really replaces direct communication with another dev. Find someone or a community online or at work who you are comfortable with. Someone you can go to when you're stuck or don't get something. The difference between needing babysitting and needing help is having specific questions. Instead of saying "I don't understand x", approach them with a more specific question like "I'm trying to get comfortable with closures so I set up a simple counter, but instead of counting to 10, I get 10 printed 10 times, can you help me spot where my error is?"

    I hope that helps.
u/drmcclassy · 1 pointr/EngineeringStudents

For anyone getting into programming, I strongly recommend The Pragmatic Programmer

This is a little more specific, but if anyone is working with .Net, I'm currently reading CLR Via C# and I think it's amazing.

u/g1i1ch · 1 pointr/explainlikeimfive

I'm going to go against the grain here with my recommendation. I'm a guy who was in a similar position years ago. I've since transitioned from web development to game programming and have working knowledge of 7+ languages.

Dude, don't sweat these feelings you're having. You're just at a wall. We all reach different kinds of walls in this career and they're really the best thing ever. It means you're about to jump ahead in skill by at least 10x. You just got to find the trigger for it. Be patient and try different things. Go check out Udacity and do some courses on there. Also this is the time to start reading books. Not just any cheap book you find. Good books that will give you the perspective of an industry professional. Books like JavaScript: The Good Parts, Code Complete, The Pragmatic Programmer, or The Little Schemer. Also it doesn't matter what language the books are in to enjoy it. 98% of all programming languages are the same anyways, which you'll soon learn. For the most part, they just have moderately different ways and syntax to do the same thing.

I would recommend not switching platforms from the web. One of the most important skills guys like us can have is seeing where technology is heading and betting on the right horse. It's very clear that webapps are going to be even more important in the future. You can already make desktop apps with web technology naively in pretty much all major OSs now.

I say learn JavaScript front and back. Read JavaScript: The Good Parts and JavaScript: The Definitive Guide cover to cover. Once you learn JavaScript it'll be very easy to transition to any C-based language, which is most of them. In fact I credit JavasScript for giving me the basics to jump to just about any language comfortably and pick it up in a few weeks.

After that, learn a good server side language like Java, Python, or C#. (C# is in very high demand, and has many applications) Or learn all three and you'll be very well positioned career wise. Well, make sure to get some experience with SQL too for good measure.

Also if you want to have a good challenge instead of being bored on those easy things, like drawing shapes, why don't you try Udacity's fine WebGL course? Jumping in the deep end isn't bad as long as you don't expect it to be easy.

u/eemiiilyy · 1 pointr/cscareerquestions

Yes. Read The Pragmatic Programmer by Andrew Hunt. This will take you from "script kiddie" status to "engineer" status, and will change your mindset from "I can hack things together" to "I can engineer a solution." It's not hugely technical, but requires technical background to understand the context. I'd say it's a very appropriate guide on "how to think like a programmer."

u/SkinnyGeek1010 · 1 pointr/jobs

+100, keep building.

After talking to lots of companies in Silicon Valley, the key to getting in right out of school is to have as much real world experience as possible. If you're a dentist, this is a problem. However you can create experience for yourself by building. You can also figure out what you like/dislike.

  • Start out doing things like r/dailyprogrammer and upload the source to GitHub. Kaggle might be helpful, I've heard it's good.

  • I'm not sure exactly what's hot in the Java world but figure out the latest tooling and frameworks for the area that you want to work in. Learn your tooling and become a craftsman (Read pragmatic programmer).

  • Build shit and deploy it, even if noone comes to use it. Put the source code on GitHub. Build things that keep pushing your envelope and keep challenging yourself.

  • Keep networking with other programmers, especially those you look up to. Try to see if there are data/java meetups with people in the industry.

  • Just email people at the company you want to work for. They often respond and will at least give you a phone interview. Putting in a resume and hoping doesn't work well.

  • Build shit and deploy it.
u/hectron · 1 pointr/minimalism

As everyone else has mentioned, you're limited to the language which you are coding in as well as the team.

Consider reading the book Clean Code and The Pragmatic Programmer.

u/ElizaTrollingYa · 1 pointr/sysadmin

Operating Systems Foundations

keep yourself busy. virtual labs read tons and tons of information

Valuable book someone recommended to me that I make myself review now and again is:

u/rocketsocks · 1 pointr/askscience

Code every day. Work on as many little interesting projects as you can. If you don't know any languages I'd suggest starting with Python, there are a million different tutorials and resources online, so getting started shouldn't be a problem.

Add to that, read some books to learn about how software development projects work, different techniques, best practices, pitfalls, etc. Here are my recommendations on books: The Pragmatic Programmer, Refactoring, Code Complete (a bit dated, but still solid), Rapid Development (slightly mis-titled, it's a good overview of different development practices), The Architecture of Open Source Applications, and Design Patterns. Code as much as you can, be ambitious, be analytical and introspective about the problems you run into, and read and understand those books too. There's a lot more you'll need to learn to become a good developer, but what I've described will give you a very strong base to build on.

Oh, and if you don't already know discrete mathematics you'll need to pick that up. I'd recommend this book.

u/BinxyPrime · 1 pointr/ExperiencedDevs

you could probably just read one good book about code architecture, the truth is no architecture is perfect, you always make trade offs between time, money, readability, performance.

I hear this one mentioned very often on the podcast coding blocks
pragmatic programmer

But i would definitely ask around before dropping $50 on a book. Maybe read some of it at a book store and see if you like it first.

u/RooN3y_2 · 1 pointr/dotnet

That book is on my Amazon list but it's a bit too expensive for me at the moment. I will purchase it one day though!

Edit: just seen its not as expensive as I thought! I'll definitely be looking to purchase it next.

u/theskimonkey · 0 pointsr/compsci

"Will it be harder for me to get summer internships at companies like Microsoft and Google?"

The fact that you ask that question at all puts you ahead of most people in your class.

I would recommend The Pragmmatic Progrommer (

Find out what languages you will be using in your future classes, and start learning/playing around with them now.

Also, as a general college rule; within the drop period, if you can tell the professor is horrible/not your learning style and there is any way possible to take the class with a different professor, drop the class and take it with the other professor.

Good luck and have fun!

u/Rob_Royce · 0 pointsr/cscareerquestions

Disclaimer: I'm still a student, so if you want to, go ahead and disregard my response. On the other hand, I have put in many hours contemplating this very question.

In "Coders at Work," Peter Seibel interviews the founder of JSON and JavaScript architect, Douglas Crockford.

Seibel poses the question
> Have you ever had problems ... (with) people who've been successful in one language (who) sometimes have a hard time giving up their old ways, even when working in a new language where they don't really make sense?

Crockford's response:
> I don't care. I just want to know that you know how to put an algorithm together, you understand data structures, and you know how to document it. (...) Generally, I prefer generalists. I want someone who's capable of learning any of those APIs but isn't necessarily skilled in any one.

In The Pragmatic Programmer, authors Andrew Hunt and David Thomas say
>The more different things you know, the more valuable you are. As a baseline, you need to know the ins and outs of the particular technology you are working with currently. But don't stop there. The face of computing changes rapidly -- hot technology today may well be close to useless (or at least not in demand) tomorrow. The more technologies you are comfortable with, the better you will be able to adjust to change.

The emphasis in comfortable is mine. It doesn't say the more technologies you master or are proficient at. Instead, being comfortable with many different areas, topics, technologies, languages, etc., will allow you to express your value to an employer in many different ways.

Now, specific to your current position. I have been with my current company for 9 years now. I started out as a cashier, moved into management after 9 months, and now I am a service technician working with all of the networking, computers, surveillance, construction, project management, etc. I am essentially a corporate representative with a LOT of autonomy, responsibility, and I wear a lot of hats. I am also the highest paid technician in the company for these very reasons. My job is perhaps one of the most stable in the company given the amount of general knowledge I have about the areas I work on actively.

Now, software might be different in that knowing a lot about everything is incredibly hard. However, picking a couple of specialized areas and being comfortable with many other areas is very likely to make you a valuable employee. It allows you to think up insightful solutions to multi-disciplinary problems. You can be the hero who comes up with novel solutions to larger problems, whereas people who specialize in C++, JavaScript, or Haskell might only know how to solve the same problems in their respective languages.

From what I can tell by reading the literature, those are the differences between people who specialize and people who generalize. I think you are experiencing what it's like to be good at generalizing. Incidentally, I would also equate CEO's, CTO's, COO's and other C-level people to generalists. They are capable of abstracting away the minutiae and details of their problems and delegate to others in order to get stuff done. They focus on big-picture stuff and let the specialists (accountants, technicians, programmers, drivers, etc) deal with the details.

u/Dameon_ · 0 pointsr/gamedev

If you really want to be a programmer, start by learning C. It'll teach you to understand a lot of the behind-the-scenes stuff that C# takes care of for you, like memory allocations. Then, proceed to C#, but outside of Unity. Start by building a console application, then play with Windows Forms applications, and then, finally, begin with C# in Unity3D. Because you've learned how to use the language outside of the framework you're entering into, you'll be ready to incorporate the framework without being distracted by learning both at once, and you'll understand how to build a program without being misled by the poor default coding in Unity and poor examples.

Along the way, study the different design patterns, and read books that talk about how to build the framework of your program. Take every single program you create, and keep a copy of the code, and some screenshots and a short description. This is your portfolio. I made the mistake of letting all my code go to the wayside over the years.

Do this intensively for about the next 4 years, and you should be a competent programmer with a real shot at getting some real work.

I'd highly recommend hopping on and checking out CS50, which is a good introductory-level computer science class from Yale and Harvard. By the time you're done with it, you will have learned how to create a basic program.

If you can afford it, I'd get a copy of The Pragmatic Programmer (, which will teach you some great mental tools for programming that you won't get out of any other book.