Dismiss Notice
Join Physics Forums Today!
The friendliest, high quality science and math community on the planet! Everyone who loves science is here!

80/20 Principle for Computer Science

  1. Aug 20, 2015 #1
    I'm interested in self-learning computer science; however, I primarily only want to know the information that produces 80% of the results and mostly ignore the rest of the fluff. There's no real deadline for me.

    There's things that are important, yet there are also things that are cool to know but don't really help. I want to know those good to know things which I can put into practice. It's kinda like learning engineering in college. As many people say, most of the things you learn in engineering are on the job, not through academics.

    Could someone point me to some sources or list the things that are absolutely fundamental? I'm already familiar with MIT's Opencourseware. Anything with artificial intelligence would be a bonus since I'm very interested in that field.

    Thanks! :)
  2. jcsd
  3. Aug 20, 2015 #2
    Learn a couple programming languages.
  4. Aug 20, 2015 #3


    User Avatar
    Gold Member

    The principles of OOP would be a great start. It applies to all programming languages and designs.

    IMO, Java realizes these principles better than any other language, although they all have it to some degree. Java promotes good design patterns while discouraging anti-patterns and lazy techniques.

    Learn Java, and everything you learn will apply to everything you do.
  5. Aug 20, 2015 #4
    Well, that's a very great answer...
    What are the top three programming languages would you recommend?

    Awesome! I'll be looking into those resources. By the way, would purchasing an AP Computer Science book be a good introduction to the field?
  6. Aug 20, 2015 #5
    Everyone has an opinion on which language to learn. The truth is, it doesn't matter. Many programmers have begun their journeys using many different languages. Just pick one and start learning. My personal recommendation is python because it is very easy to learn, very powerful, and very popular. Don't worry about learning multiple languages. Just concentrate on one. Use it to learn object oriented programming, then data structures, then algorithms, and whatever else interests you at the time.

    If you decide to pursue python then this book should suffice: https://www.amazon.com/Python-Progr...d=1440123473&sr=1-4&keywords=computer+science
    Last edited by a moderator: May 7, 2017
  7. Aug 20, 2015 #6

    I've been surfing around the Internet for a bit, and it seems that Java, the C Languages, and Python are often the most recommended for beginners. Also, you're right about the language not really mattering! A lot of people are saying that as I search through.

    Anyways, I think I'll start off with either Java or Python.

    Thanks for the information! :)
    Last edited by a moderator: May 7, 2017
  8. Aug 20, 2015 #7


    Staff: Mentor

    Look at the Processing.org website. It supports both python and java in an easy to use tool with lots of examples.
  9. Aug 21, 2015 #8


    User Avatar

    Staff: Mentor

  10. Aug 21, 2015 #9


    Staff: Mentor

  11. Aug 21, 2015 #10
    I'd say these are some of the most important things:
    Object Oriented Design - good design, proper use of polymorphism, this takes up the majority of the design process
    Parallel programming - After a design is laid out, how it's going to be done efficiently has to be figured out
    Sockets - I can't tell you how important this is but how completely ignored it is. You have to learn how to communicate with other programs on your computer or even on a different server. Don't reinvent the wheel, if your program has a stack in it, don't write a stack, hook to Redis.
    Debugger / Breakpoints - The absolute most important thing to know how to do properly!
  12. Aug 21, 2015 #11


    User Avatar

    Staff: Mentor

    On a related note, what GUI and Development Platform should the OP look at using for his first programs? Maybe the answer is obvious, but I'm mostly a C programmer ATM.
  13. Aug 22, 2015 #12
    Hey, this program is really cool! I've been toying around with it for the hours now, and it's very fun. :D

    Oh, it's okay. I've decided to learn Java first since it's the most commonly used programming language. Thank you though!

    It supports my reasoning to learn Java first. I'll be learning the C languages then Python after. Thank you!

    Oh, thank you very much! This will shave off many many hours from learning! What would be a good resource to learn this?

    I'm sorry, but I'm not very fluent in computer science. Haha.
    May you please elaborate on that? :biggrin:

    By the way, will using the high school AP Computer Science book be a great introduction to the field? By great, I'm talking AT LEAST 8/10 quality. Other resources would be vastly appreciated!
  14. Aug 22, 2015 #13


    User Avatar
    Homework Helper

    I agree with DaveC4. Java is an excellent beginner language, which will teach you all of the important fundamental concepts such as program execution, information hiding, and inheritance. Java makes it hard to make a mistake, and the memory management is done for the programmer automatically.

    I would follow it up with something like C, and then C++ to learn more about memory and how to handle it.

    As for Java, I would recommend "Objects First With Java". It's a good beginner textbook, and the BlueJ development environment is straightforward and easy to use. BlueJ also lets you generate Javadocs, which are very important to maintainability of code. You can download BlueJ quite easily along with the textbook if you look around a bit.
  15. Aug 22, 2015 #14


    User Avatar
    Science Advisor
    Gold Member
    2017 Award

    FYI. The languages already mentioned will teach you the fundamentals of programming. But you should be aware that there are so many specialized languages and tools, that most applied programming uses higher level tools and languages. They are not just "fluff". They are used because they make it orders of magnitude easier to get the work done. They are where most of the work is being done. Just to name a few: Engineering: MATLAB/Simulink; Web pages: HTML; Statistics: SAS, R; Math & Physics: MATLAB, Mathematica; Graphics: OpenGL/GLUT. The list goes on and on. So if you eventually wind up in a specialized field, you are likely to be using something like those. And if you are a general programmer, you may spend a lot of time with many of them.
    Last edited: Aug 23, 2015
  16. Aug 23, 2015 #15
    Getting to know libraries like OpenGL, MATLAB... is like just filling your toolbox, but you already have to know how to build before that. Start programming with just the language, it'll let you get a feel for things like classes and how to properly organize your code. I recommend that when you write code, get it to work first, figure out what lines of code you need to make your program work. Then go back and organize the code, then do it again, then again. Often times, hundreds of lines of really awful code, can be refactored into only a few. You'll notice parallels between how certain objects work and you'll combine them. That's the most important thing, learning how to organize your code efficiently and that can't be taught, it just comes from experience, thats why you should do iterations. Even with years of experience, I go back and refactor my own code at least once a week. I like to write all the code I need to make a problem work as quickly as possible, then sit back and think for a few hours about the best way to organize it. If you can get an internship in college, do it, you'll be surprised to find that programmers actually spend days and days without writing any code at all, arguing about how to organize it on whiteboards.

    Don't worry about what libraries to use, how most engineering works is by searching google, sourceforge, for libraries when we have a new problem and write our own code only if we think we can do something better than what's out there. I'm a general programmer and like FactChecker said, I've experienced hundreds of libraries. I've memorized ones I use often: curl, opengl, pdo, libjson, libpng... but good libraries also have documentation of how to use them, and most have lots of special functions but only a few you'll actually use, so don't be afraid when you're introduced to OpenGL and you see that the programmers manual is 5000 pages long :P
  17. Aug 26, 2015 #16


    User Avatar
    Gold Member

    For some years, the conventional wisdom was, learn Java for OOP. However, Java is now a mess, and Oracle support for it as an open source platform is questionable at best. Note in the Github link above how C# is on a fast upward trajectory...that's because: 1) there is a great IDE, free from Microsoft, 2) the language itself is standardized, free, and is moving to be used on Linux more and more, and 3) the compiler is fast and superb, and 4) it is a great language, very like Java, but with some of Java's shortcomings fixed.

    I've used both Java and C# extensively and quickly came to prefer C#.
Know someone interested in this topic? Share this thread via Reddit, Google+, Twitter, or Facebook

Similar Discussions: 80/20 Principle for Computer Science
  1. Computer Science (Replies: 8)