I'm currently in my third year of university majoring in English and Computer Science, with a smattering of art courses wherever I can find space. I chose CS because I wanted my computer to feel less like a magic box. I wanted to know why it can do the things it does. Also, I thought the job prospects after graduation were strong. Due to changing schools and general confusion about my life, I started the major later than usual, but can complete it on schedule, so I'm not worried about needing extra time. The problem I'm having is that I don't think I'm particularly good at coding.
Last semester was my first exposure to it, and we worked mainly in Racket and OCaml. I scraped by, but my grades weren't great. This semester is mostly Java and Scala, which I like much more than the previous languages, but I still am not stellar at programming. It's the only thing I've ever done where my progress seems totally uncoupled from the time I put into it. Sometimes the answer to a problem is clear immediately, and other times I pick away at it for hours with no useful results. For anyone who was a CS major, is this a normal experience when starting out? It's quite discouraging, and while CS jobs are plentiful, they are also competitive. I won't have much luck if I'm just not very good at coding.
My ideal career would be drawing and writing comics, so I spend most of my free time trying to improve my artwork, but I didn't want to bet entirely on that possibility, so I thought being a CS major was a practical decision. I've found, through meeting other people in the department, that a lot of CS majors seem to live and breathe the subject. It's the thing that drives many of their interests. CS has never been that important to me. Am I in the wrong field? Do I need a CS major to get a job in the field, or should I try to learn other languages at my own pace and forget about getting the official degree? Am I trying to split my time between programming and artwork and ending up mediocre at both, rather than good at one?
The only other academic path that I've really considered is medical school. I have most of the requirements already, and the idea of being able to help people as a doctor appeals to me beyond simply making a living, but I'm not ready to turn my back on CS yet. Has anyone else been in this position, and, if you continued with programming, do you think it was a wise decision? Alternatively, if you changed majors, do you regret doing so?
Posts
That's not super helpful. I can tell you all about med school though, since I'm halfway through, and I'll tell you this: unless you really, really want it, med school isn't for you. That's not meant to discourage you, but to let you know that med school fucking sucks sometimes. I absolutely, unashamedly geek out at how awesome what I get to do is, but that first semester is miserable. And the application process is even worse. Don't let med school be a thing you try out because you think you might like it, because if you don't LOVE it, you're signing up for minimum 7 more years of ball-busting constant grind that will be hard to get satisfaction from.
There are many many ways to learn about your computer as something more than a "magic box." Study what you're actually passionate about so that you get good grades (to hell with the people that attempt to prescribe your program of study on these boards, getting a job involves many more factors than the degree anyway). If you're interested in entry level tech/IT jobs then learn about the programming languages on your own time, see if you can find friends/people on PA who would help you with coding issues, see if you can get your foot in the door with an IT helpdesk gig at your school or eslewhere.
Do not try to double major with something like CS if its just an attempt to hedge your bets on the job market; it won't unless you are actually invested in the field.
On the other hand, don't go into grad schoolfor med school or anything of that sort unless you really really love it. It's a different world.
IT is something to consider if you decide programming isn't for you, but still want the nice computey job prospects. That's a common path for CS folk when programming isn't their thing.
FWIW, not all doctors have to deal with Patients face-to-face. Some are in research, though of course that means that they have to study even more tenaciously than any of their peers if they want to break into medical research.
Not all CS people code...
I'm not squeamish, but as you said, that's hardly enough to get me through med school. I assure you, it's not something I take lightly.
I actually do enjoy programming, even if I find the assignments frustratingly vague. It's like figuring out a puzzle, and it's very satisfying to get something working the way I want it to. It just feels like I'm behind my peers, and that I'm spending a lot of time teaching myself things. That's fine, but if I'm going to teach myself anyway, why sign up for the classes?
It seems to me that it's more important to know how to code than to have the degree in CS. If I decide to learn on my own, what languages are important? I have Java and Scala, and just started teaching myself Python this week.
Note that there are a lot of jobs in the tech industry that want to see a CS degree (or something similar), even though the job itself does very little, if any, coding. In most medium sized (and larger) software companies, the development department is pretty small, maybe 20% to 30% of all people in the company, and only about half of the people in the dev department are actually developers.
If you enjoy programming and have time spent, it's a pretty good investment to get the degree and work in the field. Your attitude seems right, but what it sounds to me like is that you haven't crossed the gap between theory and production yet, which is an extremely common problem. I was a teacher's assistant for Data Structures, so I have an incredibly good idea of what that means to most people.
I say keep working through it. Programming is an extremely lucrative activity to actually enjoy. If you can get good at it, then you're basically set.
As a side note, I'd be willing to help you out a bit if you need. Drop me a PM and I can give you some more in depth advice if you like.
The ones that can't are the ones who learned to code but never learned the theoretical stuff.
A career in computer science is also going to be a commitment to self-learning many things forever (if you want to stay relevant), so get used to that.
As long as you like the process, stick with it, as that's what CS and Developing is about at the core. From a practical perspective, I deal with programmers every day who have a huge problem learning new techniques or looking at things from different perspectives, so from the long run you'll probably end up ahead of the curve. One other thing to consider is branching a bit more into UI/UX design, as it may be a better fit for your art background.
Of course, I still hated coding and decided not to pursue it any more. Still have that CS degree from a decade and a half ago though!
The truth of the matter is that with a major like CS, you get out of it what you put into it. There's always extra work you can do on an assignment- but if you settle for just A+ work, you'll gain little ground. Going above and beyond, at least in school, is the key to taking advantage of the comically good situation that is college. I mean think about it, when else in your life are you going to have a staff of multiple people who are being paid to answer your noob questions all the time, and spend personal time with you in office hours to teach you basic principles?
Oh, this is all wrong. You are really setting yourself up to fail here.
First of all, yes, you do need to teach yourself a lot of the stuff. This is normal. If you signed up for an art degree, wouldn't you expect to practice a lot on your own? You would expect them to teach you techniques and art history, but ultimately the movements you do with the brush and pencils have to be learned on your own. The same with CS. They can teach you the theory of objects and inheritance, and code patterns, but using them is all up to you.
Secondly, yes you could teach yourself coding for free, but employers will not care unless you are a virtuouso with a huge independent portfolio, and that just doesn't sound like you. You have a hard job making yourself code when teachers are giving you assignments and making you hand them in. What are the odds you'll suddenly become a keen hobbyist when you give up classes? It's easier to get a job with a CS degree and no passion for programming than all the passion and skill in the world and no piece of paper. And if you have no passion and no piece of paper? Forget it.
Also, there is zero importance to which languages to learn. In a job you will be using languages as appropriate, whether you "know" them or not. You probably won't get any training unless you are in a huge corporation. Teach yourself how to teach yourself, if you know what I mean?
I have to emphasize this last point: Universities have a ton of resources for guidance and exploration, and you're really doing yourself a favor if you check them out and make use of them.
In the broader scope, I suggest you explore real-life career options. Interview people working in those fields. Plan to get a taste of personal experience, if you can. Computer science is broad subject, and I found myself lost after graduation simply because I never really explored beyond my course work.
I enjoyed programming, but I too was never a "live and breathe computer science" sort. As it is, I ended up in geographic information systems which has a visual aspect that I found lacking in my prior work. And I share this since you mentioned medical school: I believe radiography/medical imaging might provide the same satisfaction with a lower barrier to entry. Just two leads for your consideration.
On your (sometimes) trying experience with programming, I think you'll find re-examining your approach helpful. That is, if you've tried expending more time and effort; maybe it's time to change how you're going about it. For example, if you're the sort who normally tries to figure most things out on one’s own, you might try finding a group you can learn with. Again, take advantage of the people and resources you have available; someone might guide you to a new, helpful approach or perspective.
When I realized that I cashed in the credits I earned and took another year's worth of classes for my Social Science undergrad, and got an MBA afterwords, which I found more fulfilling and interesting.
I am running into a situation now about whether I should go for a masters in game development or not. I am thinking it may be better just to pull together some indie games and make my bones that way.
I really think I only got the most value out of it in the last year or so, because the early classes are designed to weed people out. They're abnormally hard and esoteric just for that purpose. Once you get past those, I think the real value of the CompSci program shines. However, like all majors, you have to spend time out of class. That means spending tons of time programming outside of class. As was said, you get what you put into it. It's unlike high school, where you can show up and float by. As I mentioned earlier, the first two years are awful and hard and are just to make you quit out of the program. In my Intro to Computer Science class, we were taught in fucking Scheme. And the instructor was trying to teach us about objects, in a language which doesn't use any object oriented programming at all. Talk about awful. It's a language that nobody uses, that they were trying to use to teach us principles of programming because it is incapable of teaching us such things. Now imagine this for the next 2-3 years of schooling. This is why I'm saying it's awful and designed to be hard to make as many people quit unless you really want your Master's.
With all that said, I don't use much of anything of the "practical" stuff I learned. It didn't teach me how to code or program any better. The teachers never went over things like documenting and standards. All that stuff is OJT. They did teach me how to think about the problems, and find better solutions. They taught me better problem solving skills, and some great logic and algorithmic ways of thinking about things.
From having interviewed many people, the reason why employers want people who have a degree is because there's usually a basis or standard from which they can work you up. It's also an easy way to weed people out. I know we don't really look for people who have a CS degree as much as any degree, to show that they can complete things which they start out doing. When we interview people who don't have any degree at all, let alone CS degrees, it's much harder for us as an organization to work you up to our level of knowledge. We don't know what you know, and presume you know nothing, which takes more from us to teach you the basics. I believe this thought is relatively universal.
If you just want to learn how to write code, don't go to a major university, go to a more local college, like a state one (I'm assuming from the way you describe it, Panic Button, you're not from the US, so I don't know what they have in your neck of the woods).
The latter. Big game companies are more impressed by making games than qualifications, assuming you already have a degree in computer science (which they do look for). But you have to be a self-starter. If you are a procrastinator, a half-finished indie game impresses no-one. However getting that masters helps you make those indie games; it gives you encouragement, makes you actually knuckle down, and gives you contacts with other people in the same position as you to help with skills you may not have (eg art, music.)
I had trouble securing a job after getting a BS in IT, but did eventually and I'll admit right now that while I have been expected to script and program, its mostly been a job of evaluating others code to find problems (Help desk software development). If you feel somewhat comfortable with programming but have trouble in certain languages, don't let it deter you. Chances are you will be working with a language you never heard of and will need to learn it anyway.
Not to mention learning the programs data structures, the original programs style of doing things etc. etc.
Definitely sticking with it. I've learned that I actually enjoy teaching myself new languages, so that's good. As for the stress, I didn't come to college looking for a relaxing party time anyhow, so it's alright. Thanks very much for the advice, everyone.
The results you get out of it is still largely uncoupled from the time you put into it. There's no guarantee that the methods you use in one project will all be useful in future projects, and a large portion of professional programming is troubleshooting / Googling. You get very good at using http://stackoverflow.com/ and code linters. That said, you do get better at the process of debugging the more you do it, and it's tremendous fun to constantly be figuring out how to do things.
When you say your ideal career is drawing comics, I don't know if that interest coincides with design at all, but if so, front-end web development may be a way to unify all this. Web design is useful in a lot of places as well as for personal projects, and javascript is using a lot more comp sci skills than it used for web apps that are relying more on front-end processing.
I'm in Boston, where programming is in high demand because of all the tech startups. Though we're also the university capital of the world, it's hard for a lot of companies to find developers worth hiring here. You're going to be judged much more on projects you've developed on your own than you are on your degree. If you're not up for doing some coding in your free time to build some cool sites / nifty utilities you can stick on github, you're going to have much more limited options for finding a job.
Do internships early and often. They'll give you much better experience, and a much better view of what the work is like.
Awesome android RPGs are made by my friends; check them out.
This was also true for me, but largely because I suppose I needed the experience of spending a full 40 hours a week coding. Back in school, I would spend four or maybe six hours on a project and it felt like I'd been working on it for absolute ages and it was never going to go anywhere. (Though of course I did have other classes and shit going on to worry about as well.) Now I've got projects I've been working on full time for years, and those tough projects seem silly in comparison.
Forget about being squeamish, that's not much of a problem anyway. I've tried and the single requirement for medical school is that you really, really, really want to do it. Really. You mention your ideal career is writing comics and that means you won't become a doctor because you didn't say your ideal career was being a doctor. The idea of being a doctor appeals to a lot of people, the actual reality of becoming and being a doctor less so.
My wife is a doctor, seeing her go nuts, break down and freak out repeatedly over the course of med school was enough to firmly put in my head that I would never want to be a doctor.
Yeah, this is what we call "welcome to programming"
It gets extra special when the answer to the problem is immediately clear and obvious, and then doesn't fucking work
Honestly, though? It kinda sounds like you don't really completely enjoy CS coding, and it doesn't sounds like you extremely want to be doing it.
Most of my friends at Uni were medical students. They worked about 3 times as hard as I did for Computer Science, or my boyfriend did for Maths. Medicine is not for the easily deterred.
My point is: if you want to be a comic artist/writer and that's really what you want in your lot of life, then pursue that all the way. Do what makes you the happiest and damn everyone and everything that tells you otherwise. It's rough everywhere you go; you might as well enjoy the ride along the way. It sounds like you don't enjoy CS and are only pursuing it as a backup option in case your first choice falls through. I'd say stick with your passion and if that is being a comic artist/writer then devote all of your time and energy into being better at that. It'll be rough, it'll be trying, it'll test your patience and your willpower; but if it's what you enjoy the most then the pay off is worth more than a CS job/money will ever be.
Don't let the job market tell you what to do, do what you want to do.
But I mostly think they teach it because it teaches programming-thinking and is short enough that you can write it out long-hand in an exam.
Honestly my favorite part of my programming course was the end for my senior project and it was left relatively open, you just had to meet the requirements. "Emulate some network structure that implements a method to cut off free riders"; "develop an algorithm to find the area underneath some set of pixels"; "Based on this position, provide all possible routes to any node in the system". The big pay off was the end project: Creating a system with a head-to-tail network, that updates dynamically; the pixels being a cloud and the area you need to find being some section of the cloud that is a tornado/hurricane/horrible weather pattern. Some of the GUI implementations and applying all of that into a disaster/weather/hazardous event tracking system that alerts users and systems on the current area affected, projected area affected, current users affected and projected users affected, potential routes to take to get away from the event and the status of those routes along the way.
It's a series of puzzles that you break down into smaller puzzles and find a way to tie it all together. It was specifically that project that was most beneficial to me because of how everything was tied in: theory and concepts are being built upon one another and if you like puzzles and logic puzzles, it was a dozy.
There has been a metric ton of this in my courses.
I'll admit that I'm not in love with coding as a career path.
Like I said, I have actually used the "purely academic skill" of writing a linked list many times in my career as a commercial programmer. You can even use the libraries more efficiently if you know how they work inside.
The fact that larger systems are more interesting is fine. Normal. It's the same reason that medical students start with memorizing all the names of all the muscles in the body and God knows what else. All very boring. But it gets them on to the interesting stuff. You don't want day 1 of a medical degree to be "Operate on this patient" - you want them to have started with the basics and worked up.
In other words, try making something real. You're in college and no time is better suited for it. You'll get the experience of working on (and hopefully finishing) a real project, you might get to work directly with others, and you'd even get to fold in your artistic skills to some extent. It sounds like you enjoy the process of making things, so see if the end result of the tinkering becomes more worthwhile if it's a project you're invested in rather than just small assignments built for you to complete.
Though I don't work in games now, nothing prepared for the programming world like independent game development did. You'll learn to adapt and solve a variety of problems (games can touch on almost every area of software development.) You'll learn how to structure a large project and how mistakes you make early can cause you pain later. Don't worry about the specific tech so much, half of that you'll learn on the job if this is what you want to do. Don't always expect it to be perfect, just focus on what will work best to achieve the goal in a reasonable amount of time.
The upside of this is that if you do it, by the end you'll definitely know whether programming is something that you want to do or not. Making good software is much harder than it seems. That initial plan I mentioned earlier? Cut the scope of that plan by 80%, then expect to cut another 90% during development, and you'll have something closer to what you can reasonably do. You also may end up with a cool project that you're proud of, which can give you a huge leg up in the employment world (showing off one of my game projects in an interview got me the job I have now.)
The downside is that those kinds of projects can eat a lot of time - but hey, you're in college, and you have more time now than you will for a long time to come. You may as well spend it on something that will last.
I got my BS in Computer Science (Scientific Curricula not Business). Which means there was a lot more math. If you are good at math, you might want to look into this option because by the time i finished i literally could have probably gotten multiple degrees in other sciences with only like one more semester because i had so much math and covered all the general requirements. as long as you dont waste too many hours on easy electives, even if you decide you hate it later you are very close to switching to something close in requirements to get a degree.
Just for reference, I did my bachelors in CS and finished in 2009 from a very good CS school. I went to a high school who had specialized IT curricula and took programming classes from 9th grade. I've been employed handily since then and basically do no coding work professionally.
I took to programming in high school like a duck to water; writing my own games and applications and just having a ball with it. I easily grasped the whole loops/arrays/data structures nonsense and CS felt like a natural way forward. None of that mattered when I got to college. They impressed upon us that coding is simply a means to an end; a way to enact the machinations laid forth in the tenets of the field. Computer science is exactly as it sounds -- a science of making computers do what they do, and do it well. Many schools will focus on CS as "codemonkey certification" and make you take 4 years of Java or C or whatever. It was always explained to me that the language is largely irrelevant. Sure, each language has its strengths and weaknesses, its "best" uses, etc. But ultimately, you should be able to pick up a new language in no time.
The important thing you'll get out of a good CS curriculum is the ability to reason, and that's something that you can parlay into almost any job if you do it right. Having a technical background will surely help you get into a technical field, but ultimately a CS degree is about finding the purest, most efficient way to solve a problem. It's structured that way because with computers, we finally have something that can work a million times harder and more efficient we can. Thus, by finding a way to squeeze every ounce of efficiency out of them that we can...we can wield our best tool with maximum impact. Being able to articulate the process you go through when problem-solving in CS makes you that much more attractive to prospective employers, because if you bring those skills and an ounce of passion to a job then you'll outperform most of the competition. A ton of jobs as an adult are about working smarter, and a good CS degree is basically a certification that you understand how to do that.
TL;DR -- coding isn't super important; it's just the most efficient way for your college to verify that you know how to think good. Don't get too hung up on it, and if you're enjoying learning the analysis/logic/reasoning that goes into CS subject matter, you'll have one of the best skillsets that your tuition money can pay for.
-edited for clarity