<p>I was thinking about switching into computer science. I am currently a MechE. I am good at math and physics I am struggling with. I am taking MATLAB right now and I'm pretty good at it and like it. I have no previous programming experience. Is it a good idea to switch? Will I struggle still?</p>
<p>Well, very different fields, although computing is where they overlap.</p>
<p>Matlab is a tool for scientific and engineering calculation and simulation. I don’t know how much relevance that has to CS, other than it’s a computer program and it has a programming language. But if you enjoy the stuff that Matlab does or what you can do with it, then it doesn’t sound too farfetched from being interested in CS. Actually, if you’re more interested in Matlab than the results that you can get with it, then that’s probably a sign of finding CS more interesting than ME.</p>
<p>You won’t need to study much/any physics in CS, unless your interest is computing for physical applications. That’s because CS is primarily a mathematical and applied (i.e. software development) field.</p>
<p>Would it be a problem I really have no prior experience in programming?</p>
<p>
</p>
<p>Of course not, because it’s not required. You’ll learn about that in the introductory courses. Prior exposure just makes the introductory programming courses smoother and less stressful. They’re quite intensive courses for programming newbies.</p>
<p>You will need to enjoy programming and computational problem solving though to be able to continue the studies and even further in to the workforce or research. So like in ME, you need to love it or it will be painful.</p>
<p>Is it true that you either get it or don’t?</p>
<p>Also, I am nervous if I were to switch just based on liking Matlab</p>
<p>
</p>
<p>That would be a harsh generalization to say either one. If you understand predicate logic (even if just conceptually), then you’ll understand procedural programming. The most common programming languages and paradigms are procedural with additional features (like object orientation) for making programs more comprehensible and for creating further abstractions and encapsulation.</p>
<p>If you like math, then you’ll notice that programming is reminiscent of the thought pattern in mathematical problem solving and proofs.</p>
<p>Even if you don’t quite understand formal logic or math, then you’ll still find that programming can be very reminiscent of the real world. Procedural programming is about giving step-by-step instructions to do something. E.g. you might want to write instructions for how to get to the store from your apartment and tell it in a step-wise manner, that would be reminiscent of the thinking that’s done in programming. Telling the computer how a problem is solved in a step-wise manner by using the notation and expressions that the computer understands.</p>
<p>
</p>
<p>If you like Matlab because it’s a computer program and because of how you command it, i.e. you like computer programs and the way Matlab takes instructions and gives results, then it would be CS what you’d study to understand what computer programs like Matlab are and how they’re made.</p>
<p>However, if you’re passionate about physical engineering and building, then CS will not offer that kind of enjoyment. CS deals primarily with abstract things and abstractions. It’s “like an abstract form of engineering”.</p>
<p>Thank you for answering all of my questions. I have another one I just though of. I am curious which you think is harder because I have heard back and forth arguments before. I am not basing my pick on whether which one is easier or not, I am just curious</p>
<p>
</p>
<p>Depends on the level of topics and a person’s particular persona and interests. A mechanical engineering minded person would probably not find very abstract CS topics very interesting, whereas a mathematically minded CS person might not find high-complexity mechanical engineering topics very interesting. Thus both would fair badly in those aspects, because of lack of motivation.</p>
<p>If you compare designing spacecraft or new engine systems to some of the top CS research topics like computer vision or machine learning, then I would say you’ll find both fields equally challenging, when the problems are just challenging enough. They’re just so different so it doesn’t make for a meaningful comparison. CS problems are purely mathematical, whereas ME is concerned with what can be made work physically. In CS you don’t necessarily need to concern yourself with the physical world, it’s enough that something is mathematically true, whereas in ME everything is always relative to the physical world.</p>
<p>Compared to other languages, I know Matlab is fairly easier, but how much easier? I am picking up on Matlab pretty easily so I am wondering how that would compare to me learning say C++</p>
<p>
</p>
<p>Once you learn one general purpose language, the whole world of imperative programming languages opens up for you. And you can start to understand other paradigms as well. Once you learn e.g. Java, you’ll understand the other C-syntax OO-languages pretty easily. Matlab is a special purpose language so it’s a bit different from general purpose languages, but not necessarily much because it’s imperative and has C-derived features (like most popular languages).</p>
<p>But programming is not mechanically difficult. It’s really just learning and using a small language, its constructs and its rules.</p>
<p>What’s (always) difficult is how to formulate computing problems, i.e. how to develop algorithms that compute or do what’s needed. That forms the significant and the only meaningful portion of what computer programming is really about, it’s not about learning or using programming languages, which are just tools for expressing computing problems. Computer programming as well as the field of CS is about the study and implementation of algorithms that the computer can perform to solve different sorts of problems or to perform some tasks.</p>
<p>You’ll end up learning multiple languages, because you’ll find that they all have their uses. The mantra is to use the tool that’s best suited for the job in hand.</p>
<p>I am just so nervous if I switch and I don’t like it. I am a sophomore and I don’t want to get too behind in whatever major I want to pursue. I always love math and I am good at it, but I am really struggling with physics so I looked at computer science since it’s more math</p>
<p>Well if you prefer math over physics and (mechanical) engineering, then CS is a fine choice. It’s mathematical, but also very applicable to a wide range of activities (even engineering calculations and simulations) and the software industry has good opportunities. If you find that you don’t prefer general software development that much, then you could always focus on theoretical issues or subfields heavy in complicated algorithms in which case you’d delve more into just mathematics than the more applied software development topics in CS.</p>
<p>If you have time, then you could start programming in e.g. Python to see how it feels. Some links here: <a href=“https://wiki.python.org/moin/BeginnersGuide/NonProgrammers[/url]”>https://wiki.python.org/moin/BeginnersGuide/NonProgrammers</a></p>
<p>The beginning is always difficult and figuring out ideas to program is difficult. After all, you need to have an idea about what you’re programming, in order to program. But stick to it and figure things out. Search for ideas and try implementing them. Start from console applications that read and print strings, make e.g. a questionnaire. Learn to store to and read data from memory or e.g. a text file. Learn to use libraries and eventually how to make simple GUI applications.</p>
<p>Codeacademy is also pretty popular for learning the bare bones stuff: <a href=“http://www.codecademy.com/tracks/python[/url]”>http://www.codecademy.com/tracks/python</a></p>
<p>…Python is a good language, because it’s really simple to write and read. While it has its limitations (which you’ll perhaps find out some time), it’s very popular in the scientific and engineering communities and in many applications it’s just enough.</p>
<p>Thus it’s a highly recommendable language for learning how to program. Once you know how to program in Python, you could look into the more complicated languages, or stick to Python for what it’s useful for (all sorts of things). Starting in more complicated languages without instruction can be frustrating, because you’d be studying the language more than writing programs. Getting to write programs that compile and do what’s needed is generally necessary to be motivated about learning further programming.</p>
<p>In the big picture though, you ought to think what do you find interesting in the computer and software field in order to be motivated by further CS studies and to start specializing when the time comes. Because CS is fundamentally part of the computer and software industry. CS has a lot more into it than programming and software systems (like operating systems, other software applications), but studying software development can also be a motivation.</p>
<p>You have been so much help. I still have no idea what I am going to do yet but I am looking into CS more. Even though it boggles my brain, I have enjoyed what I have been doing in Matlab so far which makes me want to explore CS as my major more and more. I would just hate to start out and find out I’m not cut out for CS</p>
<p>I’m studying CS myself. I chose the major simply, because I was interested in computer programming. But I didn’t know much about the field otherwise. Except that I’d heard about artificial intelligence and I was interested in audio/music software. After the first semester I found out that computer programming was really just the bare bones mechanical stuff and not very interesting in its own right. It’s about the ideas, not the writing itself or the languages themselves. Computer programming is really what you learn/study in the introductory courses and it’s of course the primary method for implementing computations. But after and beyond programming, there’s the whole other world of computers, software and computer science that start grasping your attention. CS is not about computers or programming, it’s about the “why” and “what can we do” of computing, where only the sky and your imagination (and obviously the computer itself) is the limit.</p>
<p>Did you have any previous experience in programming? Just curious</p>
<p>
</p>
<p>I picked up the basics of imperative/procedural programming and wrote simple text-based scripts about two months before the first semester, because I was motivated. I used some Python, OOoBasic (the Open Office script language) and dabbled a bit with LISP as a part of starting to go through the SICP book. It helped in the introductory courses, because I had had time to try out things before and to understand the most elementary concepts in programming.</p>
<p>The only significant conceptual parts I was really missing was object orientation, classes and modules/packages, which even come at a later point in the courses and not for a long time in the beginning, when the introductory courses used Java and C#.</p>
<p>Python’s pretty nice, because it works pretty well in different paradigms. I.e. you can learn about and do object-oriented programming in it, eventhough you’d start by writing just procedural code. This is not that simple in Java or C# which lock you into the Oo mindset immediately and forces you to write code that’s not immediately relevant to the task.</p>
<p>I agree with everything REACTOR has said. I may also be able to offer some additional insight for you on this issue. I actually did the opposite of what you are thinking of doing. I started college in Computer Science and then switched to Mechanical Engineering in my Sophomore year. I am now a Mechanical Engineer that has worked in the field for 12 years. Funny thing is, I came across this thread because I have been doing some research on a possible career change BACK to Computer Science. I am starting to realize how much I love tinkering around with programming. I actually always did love it. I had a couple programming classes in High School and I was pretty sure at that time in my life that I had found my calling. In retrospect, I think my dissatisfaction with CS in college was due more to personal issues than the actual major itself. Anyway, I won’t get into that. Point is, I have some unique perspective that may be valuable to you.</p>
<p>First off, you mentioned that you struggle with Physics. Let me just say that a struggle isn’t necessarily a bad thing. It just means that you are stretching your current abilities and learning. Plus, college level classes are tough in general, so a struggle is pretty much to be expected in ANY major you choose. What is more important is whether or not you ENJOY the physics classes. I struggled in Engineering as well. It was definitely a stretch for my intellect. Thing is, I really did enjoy the work even though I felt like I had to work harder than my peers to “get it”. I always found it interesting, so I always had motivation to push through it. An important thing to mention is that Mechanical Engineering college curriculum is mostly physics. You will have lots more classes down the road that are rooted in the world of physics, The real world of Engineering is no different. Just about everything you will do will be somehow related to physics. Mechanical Engineering is really just a practical application of physics. So to me, your comment about physics being a struggle is my biggest concern for you. Again, it’s not that you need to breeze through this stuff. That’s NOT the concern. The concern is whether or not you WANT to spend your time indulging in physics problems. Because, in the end, that’s what you are basically signing up for when you make the decision to take the Mechanical Engineering route. That will be, to at least some degree, how the majority of your time is going to be spent down the road.</p>
<p>Another thing to note is that Mechanical Engineering is a very broad discipline. You are going to learn a ton of different subjects in school. You will cover stress analysis, vibrations, testing, thermodynamics, heat transfer, power machinery (motors and the like), manufacturing, fluid mechanics, and materials science (and I’m sure I missed a few). That’s a very wide range of topics. Each of them are quite a bit different from each other. People in the Mechanical Engineering field sometimes decide they like one of these classes a whole lot. These people always have the option of specializing in that aspect of Engineering. We have lots of people here at our company that have done that. We have stress analysts, vibration experts, test engineers, etc. Chances are, if you are like most people, you will like some of the classes in the curriculum and dislike others. If you decide you REALLY like one particular aspect though, you always have the option of becoming an expert in that category and rarely ever touching on the other subjects. If this option turns out to be something that interests you down the road, you may want to look into getting a Masters Degree that is tailored for the subject you like. The other end of the spectrum is being a “jack of all trades” Engineer. That is the route I have found myself in. In this more general role, you do a little bit of everything but you never really dig very deep in any one subject. This option is best suited for those that end up valuing variety in their work over any specific subject matter. Whether you decide to go the generalist or specialist route is a matter of choice and the path that best fits you will become apparent in time. So, I guess the point of all of this is that Engineering is diverse and offers a great deal of variety. It also gives you the option to “pick and choose” if you decide that you only happen to like certain aspects of the discipline. This has been by far the best aspect of Engineering for me. I tend to get bored and like to bounce from topic to topic and Engineering has allowed me to do that. I have done several lateral moves here at work and learned a wide array of subjects in the process. For me, it’s been great. My point in this long rant is that even if you happen to not like the current physics classes you are in, you may find some of the other ones much more interesting or enjoyable down the road. And you may have the option to focus on only that one aspect of the discipline. Of course, there’s always the risk that you may not end up liking any of the ME subjects and then your kind of in a crappy position.</p>
<p>Now, I’m not really able to give you a real accurate depiction of the Computer Science route since I bailed on that option a while back. Someone in the CS field can correct me if I’m wrong, but it seems to me that most Computer Science majors have less variety in their work than Mechanical Engineers. I mean, it seems like you could get into different aspects of computer science like programming, security, web design, IT, etc. but since you mentioned that you like programming and are interested in that aspect of CS my guess is that you could expect to be doing programming and only programming through your whole career. Now, if you end up loving it, then that’s not a bad thing. I just know that with my personality, I would like to have a bit more options and variety in my future. Again, someone with more direct experience in this field should chime in and tell me if I’m way off base here. Actually, come to think of it, you probably should ask someone in the field if this is true. Maybe check out a programming forum or something and get some insight from people that actually walked the walk.</p>
<p>Now, a big positive here for you is that there are LOTS of opportunities to DO programming in a Mechanical Engineering job. Engineering requires a LOT of repeatable calculations and it can get really tedious and time consuming. It’s only natural to want to automate the process so you can improve turn around time on getting answers and decrease the risk of math mistakes. We have tons of in-house programs here at my work and they have all been written by Mechanical Engineers. Several Engineers here have learned programming on their own and used it as their “secret weapon” so to speak in the Engineering world. They have written some really good quality programs that every Engineer in the company uses. These programs have become an absolute necessity to our company. If these programs ceased to exist, operations would come to a stand still (or at the very least a snail’s pace). Our company has become very dependent on the programs. Once you get used to the program doing the work for you, you start to lose the ability to do the calculations by hand. The best thing is, the Mechanical Engineers that wrote the programs are the only ones that really know how they work and since they are so intimately knowledgeable with the code, through time they start to become the only Engineers that still understand the hand calculations behind the scenes. These Engineers have made themselves indispensable to the company. These are the types of employees that CEO’s worry about getting hit by a bus. They are that important. Now that’s job security. So, the point is that you don’t NEED to go the full blown CS route to get involved in programming. You have the option of doing that on the side. Another perceived advantage to doing the programming on the side is that you don’t have any Senior Programmer watching you over your shoulder or making you rewrite your code. You have a certain level of independence when doing programming as a ME. Granted, you still have a boss and they will still probably want to dictate certain aspects of a program, but since you will most likely know more about programming than your boss in this scenario, I would imagine that you have more freedom to write the program as you see fit. The down side of this though is that you may not have any Senior Programmers to learn from. It will most likely be a solitary endeavor that will require a lot of self learning. Now, I’m just basing this whole paragraph off of what my company does. It’s the only place I’ve worked since college so some other places might operate different. Other places might have full blown programmers with CS degrees doing the programming for the engineers. In that case, it might be a bit tougher to break into that kind of work at that particular company.</p>
<p>With all that in mind, here’s what I would do if I were in your shoes. I would dedicate a whole semester to trying Computer Science on for size. Take the entry level programming courses required by your university for the CS program and maybe some other classes as well. See how much you like the programming. See how much you like CS classes in general. That’s really the only way to know for sure. Also during that semester, Ask A LOT of questions from people in the CS field. Check out some forums and try to get some real insider info on the profession as a whole. Then make a decision. If you decide that you would prefer the ME route, then I would continue down that path. I would highly recommend pursuing the option of getting a minor in CS if that’s the case though. If you have a full semester in of CS classes, you may not need much more class work to get the minor and that would solidify your programming skills. That way too, you wouldn’t feel like you wasted that semester of CS classes. Who knows too, maybe a minor in CS would be enough to get your foot in the door as a programmer some day down the road if you decide you want to make a switch. I would also keep up with the programming and get really good at it on the side and then when you get into your first Engineering job out of college, you can start to work on some small scale programs on the side. Then eventually you can work yourself into being the “go to” guy at your company for writing in-house programs. Then you’d have the best of both worlds in my opinion. If you decide that you just love CS and only CS after a semester, I say go for it and just do a major change! It’s certainly not too late to do that. I did during my sophomore year. It may take you a bit longer to get your degree but in the long run if you have found your calling in life then it is absolutely positively worth it. It is always possible to change careers later down the road too (like what I’m considering) but it’s tougher to do once you’re working full time. In my opinion, it’s worth it to take your time through college and really try your best to figure out what you want to do. Especially if you have the support system (understanding parents? / financial resources?) that allows you to take a bit of a more scenic route through college.</p>
<p>Another note, if you decide that you are not enjoying the physics end of Mechanical Engineering, there are also other Engineering disciplines to pursue that may not have as heavy of a focus on physics (Electrical Engineering and Chemical Engineering to name a few). Just a thought.</p>
<p>Well, I hope this helped. If you have any questions let me know. I like to try and help out people in your shoes since I was once in them as well. Choosing what you are going to do for the rest of your life is no easy task for most of us. Some of us are lucky enough to have a clear and obvious path or passion to follow. For the rest of us, we have to do a lot of head scratching and worrying. One thing to remember though is that no matter which path you choose, you will most likely look back and wonder “what if I had taken the other path?”. It’s only natural. Good luck!</p>