ProgrammingThis forum is for all programming questions.
The question does not have to be directly related to Linux and any language is fair game.
Notices
Welcome to LinuxQuestions.org, a friendly and active Linux Community.
You are currently viewing LQ as a guest. By joining our community you will have the ability to post topics, receive our newsletter, use the advanced search, subscribe to threads and access many other special features. Registration is quick, simple and absolutely free. Join our community today!
Note that registered members see fewer ads, and ContentLink is completely disabled once you log in.
If you have any problems with the registration process or your account login, please contact us. If you need to reset your password, click here.
Having a problem logging in? Please visit this page to clear all LQ-related cookies.
Get a virtual cloud desktop with the Linux distro that you want in less than five minutes with Shells! With over 10 pre-installed distros to choose from, the worry-free installation life is here! Whether you are a digital nomad or just looking for flexibility, Shells can put your Linux machine on the device that you want to use.
Exclusive for LQ members, get up to 45% off per month. Click here for more info.
C and C++ are about the lowest high-level languages out there. Its probably safe to say that the majority of operating systems these days are written in one of these two languages (plus a sprinkling of assembler). I refer you to exhibits A and B: the Linux and Unix kernels. :-) Any good computer science program is going to teach you a wide variety of concepts and will likely use much higher-level languages than C and C++ so you can focus on those concepts rather than the gritty details of implementation. I wouldn't be surprised if you ended up using languages like Java and Python in the course of the degree. There will of course be plenty of low-level concepts taught as well. Don't be a language snob. All the currently popular languages have their appropriate uses, otherwise they wouldn't be popular.
I really want to get deep into it, master it, like a chess game, human vs pc type of programming. If "A" happens do this but if "B" happens do this, but if "C" happens do this, and so on; every possible outcome.
A language like python can be easily learned, I've done minimal programming, and from reading code, python is by far the easiest to understand.
University of Waterloo looks very interesting. From living in Canada, moving to the United States would be a big move, might be better. Still going to look around.
From personal experience, can someone say something, instead of saying MIT, yea the guys that count cards. A school they have gone to and really learned something.
IMHO, if you choose a good Computer Science course, it will be a course that includes some coverage of all of computer science from top to bottom. The implication is that it will be a course which includes lots of stuff which, as far as I can see, you consider a 'waste of time'.
Regardless of where you go, you're the one who has to put in all the work. Having said that, two schools I can think of which do treat the subject matter well (because they tend to talk a lot about the theory and the development of algorithms, not give you a 10-day crash course in C) would be Stanford and MIT. Of course to get into either of those, you're competing against the best. (And then you also need to get past the secretaries in administration - but that's a different story.) I'm sure there are many other universities in North America with excellent computer/math/electronics departments (ooh - University of Illinois at Urbana-Champagne, University of Indiana - the campus where Netscape developed) but I may not know them and probably have never even heard of some of them. For example, the State University of New York is a well-respected institution - but which SUNY campus is best for computing? You have a similar challenge with the University of California system - which campus do you go to - Berkeley? Tough question really; you need a place where lecturers do have a little time to talk to you, a place where people are always looking to do things differently rather than train you to be a robot for industry - and don't forget that no matter what the school's reputation, how well you do is largely up to you, not the school.
I really want to get deep into it, master it, like a chess game, human vs pc type of programming. If "A" happens do this but if "B" happens do this, but if "C" happens do this, and so on; every possible outcome.
Goes to show how little you really know about the subject. If/then/else is a common logical construct in all languages, high and low level. Now, wanting to account for a massive number of outcomes could be more efficiently coded using, for example, a tree algorithm. It seems to me that what you really want to get into is AI. Now chess AI is traditionally a more brute force problem. Simply churn through the all the possible endgames for each turn. Well, I shouldn't say "simply". There are a number of software engineering problems to consider, primarily speed and efficiency of the algorithm. If you don't have the computing power you can instead look for the optimum moves for n turns ahead. Beyond such a basic style of AI, there are some pretty amazing developments including neural networks and genetic programming. That said, AI programming is usually done in high-level languages such as C, C++ and LISP.
Quote:
Originally Posted by finest
A language like python can be easily learned, I've done minimal programming, and from reading code, python is by far the easiest to understand.
That's the point my friend. Take an easy to understand language so you don't have to think about all the repetitive minutia of the machine and focus on the concepts of algorithms and data structures. I can guarantee you Deep Blue wasn't programmed in pure machine code. If they did, Kasparov would probably die by the time it was developed enough to beat him. I think you are completely misunderstanding the meaning of high and low level languages. The lowest level is machine code, writing the actual binary sequences that the CPU understands. Slightly above that is Assembler, which gives you mnemonic codes that are easier to remember than binary numbers. High level languages simply refer to the more English or mathematic like languages that come more natural to humans. Higher level languages simply abstract you from the mundane "bean counting" going on inside the chips and allow you to focus on implementing algorithms and data structures. The main reason for moving toward lower level languages for a particular problem is due to the need to control the details in a more efficient or specific manner. For most programming problems C is where this optimization stops. It takes a great deal of time, effort and skill (often more than it's worth) to write better machine code than an well optimized compiler.
I don't mean to discourage you from learning about the low level details. Understanding what's going on inside the CPU is a great help to writing high level code. Also understanding how your compiler or interpreter works to change your high-level instructions to machine code is important to properly and fully leveraging the power of a programming language. Now, if you want something to master, I dare you to master C. It is sometimes even referred to as a "high-level" assembler due to its low level programming abilities. Just because it is "high-level" doesn't mean its easy or less involved. It could easily take a decade to master that language alone.
It was already stated that when choosing a university you should stay away from those that cater to the status quo of businesses. That is key, in my opinion, to choosing where to go. Programming is both an art and a science. When too tightly constrained to budgets and schedules quality will suffer, or even fail outright. To properly study this field you need to learn everything you can, not just what some code factory business would want you to know.
I went to the University of Windsor and learned a lot, but that doesn't say much. I know people who didn't learn anything. No matter what school you choose, you'll get back exactly how much you put in. If you have the grades, you can try to get into Waterloo. But don't worry too much about the school for your undergrad; you'll learn the most outside your classes (with other students and profs).
My suggestions/what I know now (just graduated w/ a B.Sc., going to grad school in sept).
- Learn to love learning for the sake of learning, not just so you can make some uber-cool program.
- The first few semesters can seem boring if you are already very geeky, but things can get hard fast so don't get lazy.
- Try hard and get good grades starting in the first semester. Its an order of magnitude easier to maintain an A average than to raise a B+ to an A-.
- Your professors are awesome people who love find bright, determined students who show an interest in CS. You'll learn tons of stuff you never could in class from them. If you are interested in grad school, find a prof who does research in an area that interests you, talk to them. They'll be able to give you more work (research) than you can shake a fist at (should be able to get credit for it too).
95se, that's exactly what I wanted to hear. I love to learn, shame there aren't as many people. Your right about people that go just to get a piece of paper and not learn anything. My biggest problem is English marks, being dyslexic sucks for English, but for thinking like nobody else, I love it. Its really hard for people to understand what I see in my brain towards mechanical engineering, computer science, sports and anything 3D dimensional.
i think computer science usually relates to making software (it'll be pretty hard to dodge 3gl's -c,c++,java- or 4gl's -sql- in that feild).
i think you want to concentrate on computer/ hardware engineering. i went thru a electrical and computer engineering program at temple university (competitive but not elite). the subjects were
interfacing and/ or/ not gates (motorola 7400 series) into integrated circuits.
translating machine language (first generation language) and assembly language (2nd generation language) for wdc6502 and m68k processors.
...
you can learn a lot from any competitive school. the elite schools are like mit, cal-tech, cal-berekley, carnigie mellon institute, worcester polytechnic institute, ...
If I understand the OP correctly, he's more interested in Comp Sci at the fundamental level, rather than the application of Comp Sci theory. See http://en.wikipedia.org/wiki/Computer_science , and particularly this section: 'Computer science education'
Names and more names! Some universities have the computer classes in the math department, others in the electrical/electronics engineering department, some have a "computer science" department and some a "computer engineering" department. In just one country, "comp. eng." in 1 school = "comp. sci." in another, and in some schools "comp. sci." = some BS degree in the pseudo-history of computing. I always laugh at those schools that ONLY teach "computer programming" (oh no, here come the VB graduates!) Any decent course in computing introduces you to the hardware at least at a basic level, because that's what you have to deal with. You don't necessarily have to go into the details of how modern pipelines, branch prediction, etc work - so long as you at least know where to look for more information if it interests you. But the important thing is you know the basics - what the machine is, how it works, the theory of programming, and of course a little real programming. If you know all that, then all other programming concepts are absolutely trivial. This is why I laugh at the scools that only teach "programming" - as far as I can tell, they teach nothing but the most trivial concepts with no understanding at all of how things work and why they work.
Names and more names! Some universities have the computer classes in the math department, others in the electrical/electronics engineering department, some have a "computer science" department and some a "computer engineering" department. In just one country, "comp. eng." in 1 school = "comp. sci." in another, and in some schools "comp. sci." = some BS degree in the pseudo-history of computing...
at my universtiy the computer science and information technology program was in the college of science and technology and electrical and computer engineering was at the college of engineering. those partitions were arbitrary because some of my electives were in the cst building.
LinuxQuestions.org is looking for people interested in writing
Editorials, Articles, Reviews, and more. If you'd like to contribute
content, let us know.