Upcoming Computer Science BA graduate/intern(?) [ Looking for input ]



  • I am currently attending a University and in my Senior year of obtaining my Computer Science degree. Currently beginning to look for jobs, internships and everything and beginning to kind of worry as I feel that there is a vast amount that I do not know, and what I do know I feel that I do not know enough to be able to hop into the job market and be of value. I am definitely not sure how working in a programming occupation is however, which is why I am hesistant. 

     

    Currently I am taking a z/OS and COBOL class which is advancing what I had learned in the past for Assembler. Basically this semester it is expected that we learn to write the JCL, work with QSAM, TSAM, IDCAMS and External Linkage. In my past Assembler course, we had used ASSIST, which my current professor says is the "baby" way and we will not be using it, but feel that I learned a great deal in that class.  Kind of curious if what I am expected to learn in what I had listed is an acceptable amount of knowledge for the real world? Obviously the learning experience would be everlasting but I kind of want to know what to expect just coming out of college if I were to get a Mainframe job, which I wouldn't mind by any means. 

     

    My second strongest(ish) language I would say would be Java. I did a lot of the work in the NetBeans IDE which I imagine with a bit of practice I could adapt to Eclispe nicely. This is what I had learned in and took two semesters in, learning the basics and then advancing onto classes. Didn't get into any applet or fancy stuff and curious if I should learn that on my own, or where I should go next with learning more. I did enjoy Java when I worked with it, but haven't worked with it much since. Would like to improve to an entry level experience base. 

     

    Other languages I have worked in is C++, which I learned the STL. I transferred at this time not knowing any C++, and my only experience prior was Java. I started taking the STL course at the university I transferred to (This is the third semester C++ course at the university) so I came in not knowing any of the syntax (cout/cin/pointers etc) and came out just fine with a high B. If not for the midterm, It would of been better. 

     

    I've also worked with HTML/CSS/Javascript/PHP and some bash in Unix. Not hugely into the Web Development portion and hoping to not take it up as a career. I can code and design it just fine, however not a HUGE interest of mine. Out of all the programming languages however I have not had a huge issue with any of my programming assignment. I have completed them all with no or little trouble(to be expected) and felt comfortable with what they were introducing.

     

    Basically my main concern is that out of all of my courses I have not had to work with a database while coding in Java/C++ to know how to connect them or work with saving the data. The only time that I have had to work with a database is in a database course I have taken, where we basically programmed a smaller scale social network in HTML/CSS using MySQL. I am also not sure that what I have learned in Java/C++, I haven't learned in depth enough to go and program a game, or a quality business application without having to research it and learn more to do it.

     

    In my next semester I plan on taking a Software Engineering course, and then the next class would either be .NET or another JAVA course(which would touch base with Java applications/applets, TCP/IP socket connections, client-server connections and Java DB Connectivity)

    So this brings us to the core of the post...

     

    For those who have worked with hiring or dealing with new CS graduates, or others with input in the field:

     

    1) Is what I have so far a good start? Where should I focus my attention with what I have/going for. Ideally I would like to get something with working in Mainframe or Java, but as an entry level programmer, I am unsure on how much I should know when graduating.

    2) When applying for an entry level position for a new graduate or an internship, what kind of questions come up? I googled a few examples and several examples we have never touched point on, while some I am capable of answering. I feel that some that I read very well could be for a more advanced position for a person with experience. Just trying to get an idea. I also was brought to a coding horror webpage where a user quized their applicant about writing a Fizz-Buzz program (Write a program that prints numbers 1-100, multiples of three print Fizz, multiples of 5 print Buzz and multiples of 3 and 5 print FizzBuzz) which I was able to do perfectly fine in just a couple of minutes (as much time as it took to write it out). 

    3) When normally going into a job, how does it normally start? How much time do you have to prepare for the given assignment, as I imagine I would be coming in on a project that is already underway. Would I just be thrown into whatever they are working on and expected to know exactly what is going on on the spot, or would I have time to look over what has been done (reasonably depending on the scale of the project) and then formulate a plan?

    4) For those that have interned in the past, how was your experience? What should I look out for, and be ready to experience. I am looking into getting an internship for the summer of 2013 to get actual job experience under my belt, and curious as to what your experiences were.

     

    Just looking for those with experience in the field and those who deal with entry-level graduates/interns to give me input and advice, or a sense of comfort in what I have done so far is pretty alright. The Computer Science field is vast, and feel like I haven't learned enough while there are other people who seem to be content on stopping where we are and feel comfortable.

     

     Sorry for the incredibly long and probably unorganized post. Also sorry about the post if it is in the wrong section on the forum. I would love for an admin or a moderator to move it to a more suitable location. Hopefully you are able to gather what I am trying to say and give some input, otherwise I would be willing to clear up more if asked. Also able to answer more about what I have done in the past, but this is off the top of my head with hundreds of other questions running through it, so it's a start. Thanks a ton for any input! Sorry again for the novel.



  • I wouldn't settle for an internship. There are plenty of full-time jobs out there. If you have a CS degree from a real college (not one that advertises during Judge Judy) that will put you in the top 10% or so of applicants at most IT shops... obviously if you're applying at Google just about everyone will have a real CS degree.



    If you want to get experience before you graduate, maybe an internship is OK... but don't sell yourself short. You've already got more formal training than most developers. I personally was a "coop" student, meaning that I alternated semesters working full time with semesters studying full time. It was a good experience. I enjoyed the work and needed the money. I don't think it helped my career that much.



    The tools you use at your first job will shape your career direction. Recruiters, managers, etc. really underestimate one's ability to pick up new technology.



    The interview process is my least favorite part of being a programmer. There will almost certainly be jobs that you will miss out on because you didn't come up with the interviewer's favorite pet algorithm or data structure during a whiteboard session. It's unfair, but it's a reality you'll just have to accept (or change careers... I'm pretty sure doctors, accountants, etc. don't have to do the whiteboard dog-and-pony show)



    The other big piece of advice I'll give you is to be prepared to move on to something else by age forty. Old programmers are creepy.



  • If you are a graduating senior and haven't had some kind of programming job (or internship) yet then something is seriously wrong.  Go to whatever job fairs your school offers and talk to everyone; the big name places won't give you a second glance but you can use them for practice before talking to the places that you have a chance with.  Really if you are getting a BS in CS then your aim now shouldn't be an internship, but rather a job (should be able to get an offer with a 'assuming you do graduate').

     

    A good area to look at is anyone who uses computers to run their business but isn't a technology company (think insurance, financials, or utilities).



  • @locallunatic said:

    If you are a graduating senior and haven't had some kind of programming job (or internship) yet then something is seriously wrong.  Go to whatever job fairs your school offers and talk to everyone; the big name places won't give you a second glance but you can use them for practice before talking to the places that you have a chance with.  Really if you are getting a BS in CS then your aim now shouldn't be an internship, but rather a job (should be able to get an offer with a 'assuming you do graduate').

     

    A good area to look at is anyone who uses computers to run their business but isn't a technology company (think insurance, financials, or utilities).

    I'm not sure anything is "seriously wrong"... he's a student. Hopefully he's used his time as a full-time student to build a good GPA.

    I really thought working and taking classes at the same time detracted from the whole college experience. I did a little of that and really didn't like it.



  • @bridget99 said:

    I really thought working and taking classes at the same time detracted from the whole college experience. I did a little of that and really didn't like it.

    I tried both working and not, how well it works depends more on course load than anything.  The thing is even if you don't do it while classes are happening then you should be doing it during the summer (internships pay better than most of what college students are doing with their summers anyway).



  • @locallunatic said:

    If you are a graduating senior and haven't had some kind of programming job (or internship) yet then something is seriously wrong.

    I wouldn't say that, I'd say: if you haven't had some kind of programming experience relevant to a job then something is seriously wrong.

    To give an example, by the time I entered college, I'd already published a shareware app, two or three freeware apps, worked with a few others on two video games, been doing C development for a MUD server. I don't think I was much different from the norm among students I entered the program with... for example I knew my friend in the same CS program had already build several websites (back when you had to use cgi!) and done a lot of scripting and automation work for his parents' business. Everything listed in this paragraph is good resume-able experience, but none of it is a "job" in the conventional sense. (Although the shareware thing would have counted if I had gotten more than 5 purchases.)

    So the real question isn't "have you had a job" but "how much resume-able experience do you have?"



  • Now to actually answer the OP:

    @Seze said:

    Currently I am taking a z/OS and COBOL class which is advancing what I had learned in the past for Assembler. Basically this semester it is expected that we learn to write the JCL, work with QSAM, TSAM, IDCAMS and External Linkage. Kind of curious if what I am expected to learn in what I had listed is an acceptable amount of knowledge for the real world?

    That sounds appropriate if the "real world" is something that uses a mainframe-- basically government, healthcare, or working at IBM supporting government or healthcare. Other than that, I don't know what good that experience gives you, frankly.

    @Seze said:

    My second strongest(ish) language I would say would be Java.

    I would hope after the last 5 years that Java usage would be plummeting. But unfortunately, I highly doubt it will for at least another decade. So this is good experience, if you're the type of person who can tolerate developing in Java with Java-quality tools. (I'm not.)

    @Seze said:

    Other languages I have worked in is C++, which I learned the STL.

    Much like Java, I would hope that C++ usage would be plummeting. But it seems unlikely. But hey at least C++ has some good dev tools.

    @Seze said:

    Basically my main concern is that out of all of my courses I have not had to work with a database while coding in Java/C++ to know how to connect them or work with saving the data.

    That's a huge oversight. You need databases and database theory. You should be able to explain first, second, and third normal form to an interviewer. You should be able to explain what a subquery is, and why not to use one, then rewrite the query without it.

    Having strong database skills will give you a *huge* lead over your co-workers. I'm not exaggerating.

    @Seze said:

    In my next semester I plan on taking a Software Engineering course, and then the next class would either be .NET

    I would recommend taking a .net course simple because it's so goddamned well-designed, especially in comparison to Java. I wish Microsoft would make their dedication (or lack of) to .net a lot more clear, though-- right now it seems like Microsoft alternates between forgetting it exists to promoting its use exclusively for everything. (A few years ago, XNA was the platform for games, now Microsoft's discontinued it and when asked for a replacement is saying 'meh'. WTF?)

    @Seze said:

    (which would touch base with Java applications/applets, TCP/IP socket connections, client-server connections and Java DB Connectivity)

    You need the networking stuff. It'll be useful regardless of what you're coding for. You should spend at least a little time setting up a network too, IMO.

    Some of my idiot co-workers think I'm a fucking genius because I know how to use Fiddler to debug HTTP, and they didn't even know such a beast as a "HTTP Debugger" even existed. Don't be them; they're idiots.

    @Seze said:

    2) When applying for an entry level position for a new graduate or an internship, what kind of questions come up?

    What kind of programming have you done in the past outside of schoolwork? This is hugely important, as I mentioned in my last post, and I fear that since you haven't mentioned it, you don't have anything worth talking about. Ouch.

    @Seze said:

    3) When normally going into a job, how does it normally start?

    Depends on the job. I don't think anybody can say more than "depends on the job." I don't think there's any "normally" here.

    @Seze said:

    The Computer Science field is vast, and feel like I haven't learned enough while there are other people who seem to be content on stopping where we are and feel comfortable.

    Other than database theory and networking theory, you won't use anything you've learned in college in your job. I'm not exaggerating. Within 5 years, you'll have literally forgotten everything you learned from college, and you'll be a better programmer due to it. Specialization is important, but that'll come naturally as you move from job-to-job-- if you asked me in college whether I'd ever work with web analytics I would have just laughed, now I'm something of an expert in it because my work in usability (what I'd rather be doing) happened to coincide with it.

    The key is, and I'm sure you've heard this a million times, be flexible. Keep your brain open to new ideas. Learn *theory*, not *practice*. (Notice I said "database theory" and not "Microsoft SQL Server". Notice I said "networking theory" and not "Cisco IOS operation".) Learn to write and communicate clearly: again you'll have a *huge* lead over your co-workers if you can explain a complex code issue in a simple fashion to a customer or non-technical manager.

    Be social, understand that you work with other developers, understanding that following protocol when it comes to things like source control, code style, etc is far more important than being the brilliant rock-star. Understand that the consumer of your code isn't the end-user, it's your fellow developers. (The consumer of the *product*, however, that's a different issue.)



  • @Seze said:

    2) When applying for an entry level position for a new graduate or an internship, what kind of questions come up?
     

    Typical (generic) interview questions you may encounter are:

    • what past success/acheivement can you recount?
    • where do you see yourself in five years?
    • what do you think you can bring to the job?
    • what would you consider your greatest strengths/weaknesses?
    • how would you deal with $situation?
    • you are going to code $alg - what approach would you take?

    @Seze said:

    Basically my main concern is that out of all of my courses I have not had to work with a database while coding in Java/C++ to know how to connect them or work with saving the data. The only time that I have had to work with a database is in a database course I have taken, where we basically programmed a smaller scale social network in HTML/CSS using MySQL.

    I feel that's a failing of your courses - database theory is pretty valuable. Even if you'll never touch databases when coding, learning a bit about how they work may provide you with a different viewpoint during systems design.

    @Seze said:

    The Computer Science field is vast, and feel like I haven't learned enough while there are other people who seem to be content on stopping where we are and feel comfortable.

    IT is a fast-moving world: those that wish to stop moving and specialise may find demand for their niche skills begins to drop. Blakey's advice about underlying theory over specific practise is sound, since specific techniques and methods may change over time but basic principles still remain.

    The last piece of advice I will offer is what I overheard from a long-time IT beardie: "to be successful in IT you've got to embrace change. You don't have to like it or agree with it - you've just got to accept that it WILL happen, and you need to be prepared for when that time comes."



  • @blakeyrat said:

    Now to actually answer the OP:

    @Seze said:

    Currently I am taking a z/OS and COBOL class which is advancing what I had learned in the past for Assembler. Basically this semester it is expected that we learn to write the JCL, work with QSAM, TSAM, IDCAMS and External Linkage. Kind of curious if what I am expected to learn in what I had listed is an acceptable amount of knowledge for the real world?

    That sounds appropriate if the "real world" is something that uses a mainframe-- basically government, healthcare, or working at IBM supporting government or healthcare. Other than that, I don't know what good that experience gives you, frankly.

    @Seze said:

    My second strongest(ish) language I would say would be Java.

    I would hope after the last 5 years that Java usage would be plummeting. But unfortunately, I highly doubt it will for at least another decade. So this is good experience, if you're the type of person who can tolerate developing in Java wih Java-quality tools. (I'm not.)

    @Seze said:

    Other languages I have worked in is C++, which I learned the STL.

    Much like Java, I would hope that C++ usage would be plummeting. But it seems unlikely. But hey at least C++ has some good dev tools.

    @Seze said:

    Basically my main concern is that out of all of my courses I have not had to work with a database while coding in Java/C++ to know how to connect them or work with saving the data.

    That's a huge oversight. You need databases and database theory. You should be able to explain first, second, and third normal form to an interviewer. You should be able to explain what a subquery is, and why not to use one, then rewrite the query without it.

    Having strong database skills will give you a *huge* lead over your co-workers. I'm not exaggerating.

    @Seze said:

    In my next semester I plan on taking a Software Engineering course, and then the next class would either be .NET

    I would recommend taking a .net course simple because it's so goddamned well-designed, especially in comparison to Java. I wish Microsoft would make their dedication (or lack of) to .net a lot more clear, though-- right now it seems like Microsoft alternates between forgetting it exists to promoting its use exclusively for everything. (A few years ago, XNA was the platform for games, now Microsoft's discontinued it and when asked for a replacement is saying 'meh'. WTF?)

    @Seze said:

    (which would touch base with Java applications/applets, TCP/IP socket connections, client-server connections and Java DB Connectivity)

    You need the networking stuff. It'll be useful regardless of what you're coding for. You should spend at least a little time setting up a network too, IMO.

    Some of my idiot co-workers think I'm a fucking genius because I know how to use Fiddler to debug HTTP, and they didn't even know such a beast as a "HTTP Debugger" even existed. Don't be them; they're idiots.

    @Seze said:

    2) When applying for an entry level position for a new graduate or an internship, what kind of questions come up?

    What kind of programming have you done in the past outside of schoolwork? This is hugely important, as I mentioned in my last post, and I fear that since you haven't mentioned it, you don't have anything worth talking about. Ouch.

    @Seze said:

    3) When normally going into a job, how does it normally start?

    Depends on the job. I don't think anybody can say more than "depends on the job." I don't think there's any "normally" here.

    @Seze said:

    The Computer Science field is vast, and feel like I haven't learned enough while there are other people who seem to be content on stopping where we are and feel comfortable.

    Other than database theory and networking theory, you won't use anything you've learned in college in your job. I'm not exaggerating. Within 5 years, you'll have literally forgotten everything you learned from college, and you'll be a better programmer due to it. Specialization is important, but that'll come naturally as you move from job-to-job-- if you asked me in college whether I'd ever work with web analytics I would have just laughed, now I'm something of an expert in it because my work in usability (what I'd rather be doing) happened to coincide with it.

    The key is, and I'm sure you've heard this a million times, be flexible. Keep your brain open to new ideas. Learn *theory*, not *practice*. (Notice I said "database theory" and not "Microsoft SQL Server". Notice I said "networking theory" and not "Cisco IOS operation".) Learn to write and communicate clearly: again you'll have a *huge* lead over your co-workers if you can explain a complex code issue in a simple fashion to a customer or non-technical manager.

    Be social, understand that you work with other developers, understanding that following protocol when it comes to things like source control, code style, etc is far more important than being the brilliant rock-star. Understand that the consumer of your code isn't the end-user, it's your fellow developers. (The consumer of the *product*, however, that's a different issue.)

    I like Java better than C#. One reason is "throws." I also think properties are masturbatory; if you have functions, you don't need properties, and a lot the C# code I've seen used properties as a thinly disguised, slightly more palatable version of fields. You can dog the toolset, but Eclipse just seems faster and more stable than Visual Studio to me.



  • Oh here's more advice: ignore everything Bridget99 says or does.

    She just quoted my long-ass post to say something completely-fucking-off-topic. I didn't even fucking say anything about C#. WTF Bridget? Go to hell.



  • @blakeyrat said:

    Oh here's more advice: ignore everything Bridget99 says or does.

    It's not necessary to completely ignore them, but that assumes you can see through the constant trolling.  blakey tends to spew vitriol over god damn everything so you should also take things with a grain of salt there.  Basically we are all overstating/lying about what will be helpful, but as long as you don't take it as gospel you should do fine.



  • I did take a course of Database but the only time actually working with one was making a smaller scaled social network on HTML/CSS/PHP using MySQL. I know what first/second/third normal form are and how to figure it out, and how to write queries in SQL just fine, as well as setup a database with fields by information given by a client. I learned about the relational database. The only problem is we did not really tie it to a code(Java/C++/etc) other than by using PHP to collect and use information entered by a user from the web page.

    I also have another semester after this current one, so I will be graduating this coming December. I will have the summer which is why I mentioned internships. I don't plan to aim for simply an internship once I finish my degree, but would like to aim for one prior to graduating(this summer) to get some experience.

    And you are right. I have not done much work at all outside of my coursework which I realize now is detrimental to not have on my resume.

    I do plan on taking .NET after hearing about how well it is desired. Feel it would be good experience to have.

    I appreciate all of the input so far!



  • To put more on, but ran out of time to edit:

    For a side project, does it have to be original? I cannot think of any useful original ideas that I could work on and has been on the back of my mind. Or would working on something that someone else has done but with my own touch and advancing somehow?



  • Blakey, I assumed that by ".NET" you basically meant C#. Should I assume you're a VB aficionado from now on? Also, I didn't think my post was off-topic. You wrote a whole wall of text fawning over .NET and trashing Java. Personally, I think they're very similar, but I also think Java is superior. I didn't want the OP to think that your statements about Java reflected widespread consensus. They most definitely do not.



  • @Seze said:

    For a side project, does it have to be original?
     

    No real reason it has to be. There are benefits to building your own wheel: you already have a model to base it upon and draw comparisons.

    For a proof-of-concept, I tried building some web-based system that performed reporting, insertion and deletion against a DB - it simply showed a list of memos, added a new memo from a <textarea> or deleted a memo when someone clicked on an icon against a particular entry. I wanted a shoutbox/postit tool to share links between several computers.

    I could have installed some open-source CMS but I took a roll-your-own route to do design & implementation plus DB interfaces for myself.


Log in to reply