I've dipped my toes in C++ programming but I haven't actually delved into it. I want to know if I actually need to learn it or any other languages before I go to college for Computer Engineering or am I just going to learn it at school anyway?
Yes, for several reasons.
- The sooner you start getting experience with the field, the sooner you'll be able to figure out if this is the field you should be majoring in. If you don't like programming, then Computer Engineering is probably not a good field to major in. Even if you are mostly interested in designing CPUs, you are going to be doing a LOT of programming.
- Most folks find that the level and amount of work expected from them in college greatly exceeds what they are used to in secondary school. Unless you are exceptionally talented, you are going to find yourself hammered with work. Do yourself a favor: find out which language is used for teaching the first year course and start learning it now. Worst case, you'll be a little bored in the class, but you'll be able to get the work done faster and use the time saved for your other classes.
- Many classes are graded on a curve. The downside of this is that you will be competing with your fellow classmates for grades. Many of your fellow computer engineering students will have already done a lot of programming, so you may already be behind the curve. This is a good time to start catching up.
- The only way to get good at programming is to do a lot of it. The more time you spend programming in the next few years, the better you will be at it. The more experience you have, the better the chance you have at landing internships and jobs.
As a CS graduate myself (BS, MS, PhD), I would recommend that you get your feet wet as soon as possible. You will have enough other stuff going on in your first year of college. In particular for programming:
Check the website of your target university and look at the lower-division class catalog or instructor syllabus webpage for introductory programming classes. Look for the programming language being taught and see what kind of things are covered in the first class. Try to read up on that material before you start.
Again, looking at the class syllabus page, look at the previous programming assignments and see what kind of software programming tools and environment are being used. Is it vi and gcc (this is what real men use)? Microsoft Visual Studio? Eclipse? Try to use these tools before you start.
Software programming is just one of the things taught in a CS curriculum. Others are algorithms (e.g. QuickSort), data structures (trees, linked lists, hash tables), and pure theory (NP-completeness and set logic). I would say these are at least as important as whatever programming language you learn.
It depends on the college. When I studied what they call "Computer Science" at California State University, they (rightfully, in my opinion) concentrated on the science aspect of it, and they expected everyone (even freshmen) to already know how to use operating systems and how to write code in some popular language. They did not accept to transfer some credits I had gained while attending language courses at a State University of Ohio. (That was a bummer for me, but again, I understand it.) This also had an upside: I completed an assignment once, writing my code in C; the professor could not read C, so he asked me to rewrite it in Pascal. I asked the head of the department about the rightfulness of this request, and he said that since they do not teach languages, they also cannot expect anyone to complete an assignment on any specific language. So my professor had to live with my assignment written in C. So, the bottom line is, check with the university you are going to go to. But if you want my advice, it never hurts to learn as much as possible beforehand.
If you have to question whether you should learn a programming language in the first place, ask yourself if its really what you want to do. Most computer science first years are already pretty damn good at programming before they even start so you will be competing against those types that naturally tend toward the geek. Either jump into it head first or do something else you love. Don't be on the fence. Love what you do. I don't need or want a vote for this one, just want to talk straight to you.
I don't think you need to learn it before you attend college. However I believe like most things in life, if you are pre-prepared before attending some event etc then you are most likely to better able to make informed decisions about what information to absorb and what information to discard.
More specifically by at least dipping your toes, you may be able to listen to what your lecturers are saying rather than just copying what they say verbatim but not actually absorbing the concepts they are trying to get across, which in my opinion is the most important part of university (not the actually learning syntax part of a language etc).
As for what programming language to learn. Probably doesn't matter but might be useful to start reading up on the ones you are likely to cover in your first year.
However, the flip side of pre-learning is that when you get to your first few months you might find the lectures boring and elementary. This then could lead you not attending classes or discarding what the lecturers are trying to get across hence missing some vital piece of information such as realising the way you actually learnt something is not the right way i.e. you learnt a bad habit prior to attending college.
By already delving on these types of sites you are probably already part of the way there to being one step ahead and so help your learning during college. Either way, what you pre-learn will probably just be the tip of the iceberg. You will need to carry on this learning curve in and out of college material if you want to carry on the benefits it may provide.
Yes, but don't start with the most complicated language, there will be plenty of time for that later.
Start with something simple to get your feet wet. It's much easier to wrap your head around programming concepts when you're not being burdened by the language itself. Likewise, some languages do things better than others.
This list may vary, but basically pick a few fun languages and use them to learn concepts. Subsequently, you'll be learning to be adaptive, rather than stagnating on one language for the rest of your life and angrily trying to defend it on the internet all the time.
I'm going to say that I don't think it will matter too much which language you know when you start, but it will probably give you an advantage in the sense that when you get your first programming assignment, you don't have to struggle with the problem of thinking in terms of code - you will already have some experience there. One less learning curve to overcome is a good thing. Bonus if you learn the language they teach in your first year, but not necessary.
You won't know whether Computer Engineering is really the appropriate degree program for you until you at least find out how hard or easy it is you find programming to be, as well as how good you are at it. The only way to really know is to try and learn at least one programming language and do lots of coding, ASAP.
Some things you might be interested in learning before going to University (choose among them):
- Some more math (I cannot be more specific, because I'm French, and have no idea of the math skills you are expected to have).
- Some other programming languages, like Ocaml, Scheme, Haskell, Lua ... They will open your mind to new ways of thinking.
- Some algorithmics book
- Better English & written skills (and a foreign language is never bad)
- Using and coding under GNU/Linux, and free software in general. The ability to study free software (and contribute to it) will learn you a big lot.
- Work autonomy, being able to define yourself a work plan, and stick to it
- The SICP
I won't recommend focusing in a narrow way on C++; other languages, books, skills will bring you much more. Don't spend all your efforts on C++.
Enjoy your learning.
Definitely! If you haven't programmed before, learning C++ or C or Java or C# will get you started off right. All of those languages are Algol based (roughly) - once you've learned one of them, learn Lisp or Haskell. The terrific paradigm shift between the two families will aid you no matter what your courses entail.
Personally I would recommend it. This won't apply to all schools, but I went to what is considered a very good engineering school and the introductory programming classes were awful. Knowing the basics will help you avoid many of the bad practices/incorrect knowledge that might be taught to you. And as another answer mentioned, you'll coast through those easy intro-to-programming classes while others struggle. And if you're like me, that gives you more opportunities to help your friends who are struggling with it themselves.
I think you should. Besides the reasons given by others here, I would add that a lot of university professors are not very good at teaching and therefore you cannot rely on them to teach what you are learning very well. You'll understand what they are saying a lot better if you already have a grasp of the basics.
Plus, the ratio of course material to class time is often too high in universities, so even when the professor is a decent teacher, he cannot teach you effectively in the class time available. So any knowledge you gain in advance will help you keep up with the fast pace of the classroom.
IMO C++ is one of the worst languages for beginners. Go ahead and study C++ if you don't find it too difficult, but other languages such as C#, VB, Ruby, or Python are quite a bit easier.
It would be a very smart move to know some language before entering college. College instruction in Computer Science is often of a dismal quality, given by TAs who are untrained or who don't speak English. Introductory courses are not a priority and poor instruction is the rule. Universities make money off of grant overhead; getting grants is the priority of most college faculty, not teaching undergraduates. This is a sad rule with few exceptions.
However, the quality of programs in high schools can be poor too. Many school administrations think training in using Micosoft Word is computer science. Ah, the nonsense that eminates from the ed schools!
I wish I could be more optimistic. If you have a good compsci program in your high school, latch onto it. Go beyond the bounds and be aggressive about learning. If you are fairly enterprising, it's not hard to teach yourself Python and to get some skill at it. Once you learn it, learning other languages is not to hard. Python's simple grammar makes learning it relatively easy.
Which one you should learn depends on what "Computer Engineering" means. It's a pretty non-standard term. Where I studied, it was a combination of electronics and computer science.
If you expect to be primarily working with computer hardware, I would suggest learning C and Forth. If you are primarily going to be doing what I would consider "computer science", I would suggest learning something like Python or Smalltalk in order to try out "real work", and a functional programming language of your choice (I would suggest some variant of lisp or scheme, but choose what's easiest and coolest).
I'll share my own experience.
I started programming about 10-11 months ago. My first real exposure to it was with PHP, but afterwards, I found myself learning C# in an introductory course (CS 140) at my local community college. After I learned the basics, I pretty much flew with it and haven't stopped since. After C#, I decided to start learning the lower level mechanics of how computers worked. I'm working on an application which is supposed to be multi-platform, and is supposed to help video game engines to interact with each other (similar to SDL, but possibly more lower level than that, with a strict focus on GUI, mathematics, and other helper functions).
Basically, if it wasn't for that class, I wouldn't have found what I loved until much, much later. You don't really know that you enjoy programming until you really understand the concepts behind it. If you want to find out, I'd recommend picking up an intro to programming book and start with C/C++ since you need to understand what you're doing, rather than using a language which will hold your hand like Java or C# or just some scripting language - mind you, these have their place and are good tools to use, but it's also very imperative that you understand the lower-level concepts in the beginning. This was a mistake I made in the beginning.
After that, keep programming if you enjoy it. If not, learn something else. Whatever it is you decide to do, you should be spending as much time as you can on it before you attend some 2-4 year university to learn it, as it will REALLY keep you ahead of the game. It will also show motivation to any employer who potentially could hire you.
I can tell you that computer science/electrical engineering disciplines are by far the fastest in terms of their evolution rates (which keep increasing year-by-year), and you're going to have to keep learning new technologies to keep up with what's the latest and greatest (which you should find at least somewhat interesting, though it really depends on what area of expertise you're specializing in. For example, I hate web programming, and I'm not interested at all in the technologies that exist for it, but some people really enjoy it and ARE interested in it). Despite this, C/C++ are great languages to learn as, while many other languages (e.g. C#, Java), have their own prebuilt APIs to "make life easier", you're not going to learn a damn thing about what's really happening under the hood until you "roll with the hard knocks" (this may or may not include learning assembly at some point - it really depends on what you're going to be doing). In other words, the more you learn about operating systems and lower level architecture on your own ,the more valuable you are as a programmer. This includes learning concepts such as Linked Lists, or Binary Search Trees and various other algorithms.
Basically, I've been programming for 10-11 months and I haven't attended any university one bit. I've taken a C# class at a community college (my first programming class, which taught me the fundamentals), and at least 95% of the rest I've learned on my own. This is because, after taking that class, I knew I wanted to be a programmer. You'll know it once you come to understand it. Either path you choose, you should be studying it independently if you really want to be successful at it, because it increases your aptitude for motivation and commitment. A programmer has to be motivated to succeed. They deal with a lot, more than just simply "writing code". An application constantly has to be tested, debugged, and understood from the ground up. Typically, whether small or large, you're almost going to be learning something new for every project you undertake. This is a good thing, because you need to keep that brain active.